在后台模式下关闭我的应用后会下载恢复

时间:2016-12-29 12:11:26

标签: ios swift

我发现可以在后台应用程序模式下载。我在XCode中实现了后台获取模式,并注册了后台任务,并且工作正常。

用户强制关闭我的应用程序后是否可以恢复下载任务?怎么样?

3 个答案:

答案 0 :(得分:6)

不,当您的应用被用户终止时,您无法继续下载!您的应用必须要求保持背景状态!因为如果用户强制关闭app意味着,他不想再运行它了。如果您的应用程序被系统暂停,那么它可以被唤醒,但如果它被用户终止则不会被唤醒!

  

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

更新:(正如评论中所述)

Refer the apple documentation,它说,

  

此方法可让您的应用知道它即将被终止并完全从内存中清除。您应该使用此方法为应用程序执行任何最终清理任务,例如释放共享资源,保存用户数据以及使计时器无效。您执行此方法大约需要五秒钟来执行任何任务并返回。如果方法在时间到期之前没有返回,系统可能会完全终止该进程。

     

适用于不支持后台执行或已关联的应用   对于iOS 3.x或更早版本,此方法始终在用户时调用   退出应用程序。对于支持后台执行的应用程序,此方法   通常不会在用户退出应用程序时调用,因为该应用程序   在这种情况下简单地移动到背景。但是,这种方法可能   在应用程序在后台运行的情况下调用   (未暂停)系统需要因某种原因终止它。

     

调用此方法后,该应用程序也会发布一个   UIApplicationWillTerminate通知给感兴趣的对象a   有机会回应过渡。

答案 1 :(得分:2)

当任何任务完成时, NSURLSession 对象使用错误对象或nil(如果任务成功完成)调用委托的 URLSession:task:didCompleteWithError:方法。 如果任务失败,大多数应用程序应重试请求,直到用户取消下载或服务器返回错误,指示请求永远不会成功。但是,您的应用不应立即重试。相反,它应该使用可访问性API来确定服务器是否可访问,并且只有在收到可访问性已更改的通知时才应发出新请求。

如果可以恢复下载任务,则NSError对象的userInfo字典包含 NSURLSessionDownloadTaskResumeData 键的值。您的应用应传递此值以调用 downloadTaskWithResumeData: downloadTaskWithResumeData:completionHandler:以创建继续现有下载的新下载任务。

如果无法恢复任务,您的应用应该创建一个新的下载任务并从头开始重新启动该事务。

结账时间:Life cycle of URL Session

答案 2 :(得分:1)

是的-如果我理解您的需求正确-Apple允许使用State Preservation和Restores API:

  

应用被系统终止后,将其恢复到之前的状态。

请查看Apple的文章:Preserving Your App's UI Across Launches,以获取有关此框架的概述。

有关保存过程的详细信息,请参见以下文章:About the UI Preservation Process

有关恢复过程的详细信息,可以在这里找到:About the UI Restoration Process

RaywenderlichState Restoration Tutorial: Getting Started上有该框架的教程实现(有些过时了)