OGeek|极客世界-中国程序员成长平台

标题: ios - NSURLSession 下载重新启动而不调用任何委托(delegate) [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 13:10
标题: ios - NSURLSession 下载重新启动而不调用任何委托(delegate)

我注意到我的应用程序出现了与 NSURLSession 相关的奇怪行为。

我使用带有后台配置的 NSURLSession 开始下载,下载开始时没有任何问题,但在某些时候,显然是随机的,它会停止几秒钟,然后在不调用任何委托(delegate)以外的情况下重新启动

-URLSession: downloadTask: didWriteData: totalBytesWritten: totalBytesExpectedToWrite:

具有重置的字节数。

谁能告诉我发生了什么?

这是我初始化 session 的方式

if([[[UIDevice currentDevice]systemVersion] compare"8.0" options:NSNumericSearch] != NSOrderedAscending)
{
    sessionConfiguration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:sessionId];
}
else
{
    sessionConfiguration = [NSURLSessionConfiguration backgroundSessionConfiguration:sessionId];
}

sessionConfiguration.HTTPMaximumConnectionsPerHost = kSimultaneousDownloads;
[sessionConfiguration setSessionSendsLaunchEvents:YES];
sessionConfiguration.discretionary = NO;

self.session = [NSURLSession sessionWithConfiguration:sessionConfiguration delegate:self delegateQueue:self.backgroundQueue];

--编辑--

我按照 Rob 的建议,使用 Charles 和 xCode 调试器发现事情发生的顺序是:

  1. 创建 session
  2. 调用getTasksWithCompletionHandler, session 上没有任务
  3. 开始下载任务
  4. 调用URLSession:didReceiveChallenge:completionHandler:,我调用完成处理程序completionHandler(NSURLSessionAuthChallengePerformDefaultHandling,nil);
  5. 来自 didWriteData: 委托(delegate)的日志显示 id 为 1 的下载任务正在下载数据,下载显示在 Charles 上,状态为 Receiving response body
  6. 在某个随机时间点,我可以看到 Charles 上的下载状态更改为 Complete,并开始了新的下载
  7. 调用URLSession:didReceiveChallenge:completionHandler:,我调用完成处理程序completionHandler(NSURLSessionAuthChallengePerformDefaultHandling,nil);
  8. 来自 didWriteData: 委托(delegate)的日志显示 id 为 2 的下载任务正在下载数据,新的下载显示在 Charles 上,状态为 Receiving response body



Best Answer-推荐答案


几个建议:

就我个人而言,最后一期是我第一次开始使用后台 session 时最让我感动的一期。我们非常习惯于在调试器中运行应用程序,稍后停止并重新运行应用程序,而之前 session 的残余影响很小。但是后台 session 很麻烦,因为除非您真正从设备/模拟器中删除应用程序,否则这些旧请求会一直存在。

关于ios - NSURLSession 下载重新启动而不调用任何委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27275702/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) Powered by Discuz! X3.4