我正在使用Xamarin.iOS并实现Downloadmanager。
我已经找到了一个关于如何在DownloadManager中实现一个C#的教程,在这个教程的指导下,我已经将用written编写的逻辑转录成了C#。DownloadManager工作和队列操作并执行它们。我面临的唯一问题是应用程序向暂停模式的过渡。队列的行为不是那么确定。有时执行所有排队操作,有时应用程序停止执行。
用例1:启动文件同步并锁定iPad。大多数情况下,排队操作都是执行的。但有时当我解锁iPad时,应用程序被发送到后台,我必须双击home按钮才能返回到应用程序,在这种情况下,文件同步在执行过程中停止了。
用例2:我启动文件同步并将应用程序发送到后台。与以前的用例中相同的行为。有时执行所有操作,有时停止操作。
用例3:客户启动同步,在回来一段时间后保持iPad无人值守,同步还没有完成,应用程序也在后台。平均约70%的同步是完成的。
对于实现,我使用了一个以"NSOperationQueue“作为元素的"DownloadOperation”。"DownloadOperation“只是NSOperation对象的包装,执行设置为”异步“。
可能的问题
期待着这次讨论。
P.S. I启用了“后台模式”和“后台获取”
发布于 2017-09-05 09:40:51
根据您的描述,我想您使用NSURLConnection来执行后台下载,这是不推荐的。另外,背景提取用于少量的内容,并且它将是活动的机会主义,这不适合您的场景:
机会性地获取少量内容 需要定期检查新内容的应用程序可以要求系统唤醒它们,以便它们能够为该内容启动一个获取操作。
因此,您可以切换到使用正式推荐在后台下载内容的NSURLSession。用于配置后台会话,如果应用程序被挂起或终止,下载过程将继续进行(除非用户强制使用该应用程序)。
在后台下载内容 下载文件时,应用程序应该使用NSURLSession对象启动下载,这样系统就可以控制下载过程,以防应用程序被挂起或终止。当您为后台传输配置NSURLSession对象时,系统将以单独的进程管理这些传输,并以通常的方式向应用程序报告状态。如果您的应用程序在传输过程中被终止,系统将继续在后台进行传输,并在传输完成或一个或多个任务需要应用程序处理时启动您的应用程序(酌情)。 ..。 如果任务尚未完成,系统将终止您的应用程序,系统将自动继续管理后台的任务。如果用户终止您的应用程序,系统将取消任何挂起的任务。
关于如何通过NSURLSession创建后台下载管理器,您可以参考:
用URLSessionDownloadTask下载后台文件博客与斯威夫特
我认为您需要在后台下载多个文件,这里有一个很好的指南:在iOS中批量下载多个文件。
https://stackoverflow.com/questions/46039338
复制相似问题