【问题标题】:NSURLSessionDownloadTask created by AFNetworking does not resume after force quitAFNetworking 创建的 NSURLSessionDownloadTask 在强制退出后不恢复
【发布时间】:2016-08-07 23:00:21
【问题描述】:

我正在使用AFURLSessionManager'sdownloadTaskWithRequest:progress:destination:completionHandler: 方法来创建NSURLSessionDownloadTask

据我所知,AFURLSessionManager 实现了NSURLSessionTaskDelegate 并将自己设置为NSURLSession(也是由该经理创建的)的委托。

当我在下载过程中强制退出应用并重新启动它时,应根据 Apple 的文档调用 NSURLSessionTaskDelegate's URLSession:task:didCompleteWithError: 方法。

但即使我通过setTaskDidCompleteBlock: 方法(调用它以反映我上面提到的回调)向AFURLSessionManager 注册了一个完成块,该块也不会在应用程序重新启动时执行。实际上我不希望它被调用,因为 NSURLSession 实例在终止时已经死亡。

我应该如何完成这项任务?也就是说,如果用户强制退出应用程序,我想在应用程序重新启动时恢复下载。

【问题讨论】:

  • 如果用户强制退出应用程序,这将杀死所有请求(无论是标准请求还是后台请求)。如果您希望在应用程序终止后继续请求,则必须使用后台会话,但 IIRC,即使用户强制退出应用程序,即使应用程序离开前台并在正常过程中被抛弃,也不会继续应用程序的生命周期。

标签: objective-c afnetworking nsurlsessiondownloadtask


【解决方案1】:

正如前面在 cmets 中提到的,这是正常行为。强制退出应用程序会导致取消所有后台请求。后台会话中的任务在您的应用暂停或您的应用被操作系统终止时继续运行(例如,如果应用崩溃,或者如果另一个应用使用太多内存以致您的应用被驱逐) .

【讨论】:

  • 感谢您的回答。实际上我不需要在强制退出后继续在后台下载。我需要将恢复数据存储在 applicationWillTerminate 事件中,以便在用户再次启动应用程序时恢复下载。我试图取消下载并在 applicationWillTerminate 回调中成功生成了恢复数据,但我无法将数据保存到文件中。我认为时间不够。我应该怎么做才能处理这种情况?
  • 这不是一个很大的数据。试着把它扔进 NSUserDefaults 并调用 synchronize。
  • 我已经尝试过了,但没有成功,然后我弄清楚了原因,如果我通过 xcode 运行应用程序,强制退出会产生异常并且 applicationWillTerminate 回调无法正常运行。现在可以了,谢谢。
猜你喜欢
  • 1970-01-01
  • 2016-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多