在提出问题之前,让我澄清一下我对iOS App状态的理解:
Backgrounded:在此状态下,您的应用不再处于前台,但它仍然可以运行代码。
暂停:当您的应用无法再运行代码时,您的应用就会进入此状态。
现在,我想在App处于后台时继续下载,即它仍然存在于多任务处理屏幕中。它正如预期的那样与后台传输服务一起工作。
但是,在一些教程参考中,我已经读过,即使App是Backgrounded / Suspended也可以执行下载。即使我的应用程序被暂停,即从多任务屏幕中移除,它是否可以工作?
我一直在阅读许多文档,包括有关下载任务的后台传输服务的Apple类参考,但没有人澄清当App暂停(被杀)时下载不起作用。
欣赏你的想法和建议!!!
答案 0 :(得分:3)
如果您的应用已被系统暂停(无需从多任务屏幕强制退出),您的后台会话将继续有效。
如果强制退出应用程序,则所有下载任务都将被取消。
以下内容来自 backgroundSessionConfigurationWithIdentifier(_:)文档:
如果iOS应用程序被系统终止并重新启动,则应用程序可以使用相同的标识符来创建新的配置对象和会话,并检索终止时正在进行的传输的状态。此行为仅适用于系统正常终止应用程序。如果用户从多任务屏幕终止应用程序,系统将取消所有会话的后台传输。此外,系统不会自动重新启动用户强制退出的应用程序。在再次开始传输之前,用户必须明确重新启动应用程序。
答案 1 :(得分:1)
多任务UI中显示的应用程序不一定是执行代码或获取数据。列出的应用可能会暂停或根本不运行
[[UIApplication sharedApplication] applicationState]
会检查您的申请状态,您可以测试您的应用。
当应用程序变为非活动状态时,NSURLSession类可以切换下载并上传到操作系统。与几乎所有后台执行API一样,如果用户强制退出多任务UI,则后台操作将终止
在iOS 7中,Apple增加了对后台获取的支持 - 一种智能的,每应用程序的crontab,在机会主义时刻醒来。无法强制后台提取以精确的间隔执行。 iOS会在计划将来的回调时检查先前后台提取期间使用的数据和电池电量。
后台提取也可以通过远程推送通知触发,并且具有与完全处理程序相同的委托方法。
完整教程就在这里
https://blog.newrelic.com/2016/01/13/ios9-background-execution/