我发现可以在后台应用程序模式下载。我在XCode中实现了后台获取模式,并注册了后台任务,并且工作正常。
用户强制关闭我的应用程序后是否可以恢复下载任务?怎么样?
答案 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:以创建继续现有下载的新下载任务。
如果无法恢复任务,您的应用应该创建一个新的下载任务并从头开始重新启动该事务。
答案 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
Raywenderlich在State Restoration Tutorial: Getting Started上有该框架的教程实现(有些过时了)