【问题标题】:Background transfer download task failed when app was closed关闭应用时后台传输下载任务失败
【发布时间】:2014-08-04 06:17:37
【问题描述】:

我创建了后台 nsurlsession 来执行下载任务。当应用程序处于后台时,它运行良好。但是,当我关闭应用程序(双击“主页”按钮并向上滑动)时,下载任务似乎被取消并失败,当我重新启动应用程序时,它让我再次从头开始下载。根据 Apple 文件,即使应用程序不再运行,后台传输也能正常工作。我做错什么了吗?

【问题讨论】:

标签: ios nsurlsession nsurlsessiondownloadtask background-task


【解决方案1】:

来自the NSURLSessionConfiguration Class Reference

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

因此,如果 iOS 本身在正常过程中关闭您的应用程序,后台传输将继续进行,但如果您强制从多任务屏幕退出,它将终止您的所有传输。

【讨论】:

    【解决方案2】:

    当用户强制退出时,应用不会重新启动以进行后台下载。

    application:didReceiveRemoteNotification:fetchCompletionHandler: 的 iOS8 文档说:

    使用此方法为您的应用处理传入的远程通知。 与 application:didReceiveRemoteNotification: 方法不同,它是 仅当您的应用程序在前台运行时调用,系统 当您的应用在前台运行时调用此方法或 背景。此外,如果您启用了远程通知 后台模式,系统启动您的应用程序(或从 暂停状态)并在推送时将其置于后台状态 通知到达。但是系统不会自动 如果用户强制退出它,则启动您的应用程序。在这种情况下, 用户必须在系统之前重新启动您的应用程序或重新启动设备 尝试再次自动启动您的应用。

    【讨论】:

      【解决方案3】:

      NSURLSessiondocumentation的第一段,我们可以观察到:

      此 API 提供了一组丰富的委托方法来支持 身份验证并使您的应用能够执行后台 在您的应用程序未运行时下载,或者在 iOS 中,当您的应用程序运行时下载 暂停。

      现在注意它声明的位置:

      或者,在 iOS 中,当您的应用被暂停时。

      看起来只有 OS X 应用程序能够在您的应用程序未运行时完成后台任务。

      【讨论】:

        猜你喜欢
        • 2019-07-25
        • 2017-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-18
        • 2016-03-01
        • 2017-03-31
        • 2019-02-18
        相关资源
        最近更新 更多