1

在提问之前,让我澄清一下我对 iOS App 状态的理解:


后台:在这种状态下,您的应用程序不再处于前台,但它仍然能够运行代码。

已暂停:您的应用程序在无法再运行代码时进入此状态。


现在,我想在应用程序处于后台时继续下载,即它仍然存在于多任务屏幕中。它与后台传输服务按预期工作。

但是,在一些教程参考中,我读到即使应用程序处于后台/暂停状态,您也可以执行下载。即使我的应用程序被挂起,即从多任务屏幕中删除,它还​​能工作吗?

我一直在阅读许多文档,包括有关下载任务的后台传输服务的 Apple 类参考,但没有人澄清当 App 暂停(杀死)时下载将不起作用。

感谢您的想法和建议!

4

2 回答 2

3

如果您的应用程序已被系统挂起(没有强制退出多任务屏幕),您的后台会话将继续工作。

如果您强制退出应用程序,所有下载任务都将被取消。

以下来自backgroundSessionConfigurationWithIdentifier(_:)文档:

如果 iOS 应用程序被系统终止并重新启动,则该应用程序可以使用相同的标识符来创建新的配置对象和会话,并检索终止时正在进行的传输状态。此行为仅适用于系统正常终止应用程序。如果用户从多任务屏幕终止应用程序,系统将取消所有会话的后台传输。此外,系统不会自动重新启动用户强制退出的应用程序。用户必须明确地重新启动应用程序才能重新开始传输。

于 2016-05-20T14:08:04.720 回答
1

多任务 UI 中显示的应用不一定要执行代码或获取数据。列出的应用程序可能已暂停或根本不运行

[[UIApplication sharedApplication] applicationState]将检查您的应用程序状态,您可以测试您的应用程序。

当应用程序处于非活动状态时,NSURLSession 类可以将下载和上传移交给操作系统。与几乎所有后台执行 API 一样,如果用户强制退出多任务 UI,后台操作将终止

在 iOS 7 中,Apple 增加了对后台提取的支持——一种智能的、每个应用程序的 crontab,它在机会时唤醒。没有办法强制后台提取以精确的时间间隔执行。iOS 在安排未来的回调时会检查在之前的后台获取期间使用了多少数据和电池电量。

后台获取也可以由远程推送通知触发,并且具有非常相似的委托方法和相同的完成处理程序。

完整教程在这里

https://blog.newrelic.com/2016/01/13/ios9-background-execution/

于 2016-05-20T14:10:38.560 回答