【问题标题】:NSURLsession background transfer service for download task, can it work even when App is suspended?下载任务的NSURLsession后台传输服务,即使App挂起也能正常工作吗?
【发布时间】:2016-09-17 19:15:59
【问题描述】:

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


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

暂停:当您的应用无法再运行代码时,它会进入此状态。


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

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

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

感谢您的想法和建议!!!

【问题讨论】:

    标签: ios nsurlsession nsurlsessiondownloadtask nsurlsessionconfiguration nsurlsessiontask


    【解决方案1】:

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

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

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

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

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

    完整教程在这里

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-06-23
        • 1970-01-01
        • 2011-03-10
        • 1970-01-01
        • 1970-01-01
        • 2021-05-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多