【问题标题】:How do I know if NSURLSessionUploadTask is working when application is suspended?当应用程序挂起时,我如何知道 NSURLSessionUploadTask 是否正在工作?
【发布时间】:2016-01-31 04:39:25
【问题描述】:

当我的应用程序在前台运行时,我看到定期调用:NSURLSessionTaskDelegate -> URLSession:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:

当我的应用程序移动到后台并被挂起时,对该方法的调用将停止,因此我没有关于 NSURLSessionUploadTask 是否继续上传的反馈。是否有任何技术可以获取有关上传的反馈?

【问题讨论】:

    标签: ios nsurlsessionuploadtask


    【解决方案1】:

    通过查看有关 NSURLSessionUploadTask 的其他 StackOverflow 帖子,我可以看到对此功能有很多困惑。以下是我发现的一些有助于减少这种混淆的反馈机制:

    • 使用网络代理和数据包嗅探器,如 Wireshark(有关详细信息,请参阅 this)。过滤除进出您将文件上传到的服务器的流量之外的所有流量。查找来自服务器的 HTTP 响应 (200) 和来自 iOS 设备的 FIN,ACK 以表明上传已完成并且已收到响应。您还可以使用数据包嗅探器来诊断上传问题。

    • 使用Instruments捕获进程nsurlsessiond的网络流量

    • 等待上传完成。如果您的应用程序在后台并在上传完成时挂起,那么 iOS 会将您的应用程序从挂起状态移动到在后台主动运行,并按此顺序调用以下方法:
      • 通过NSURLSessionTaskDelegate -> URLSession:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend: 可能会调用一些在应用程序进入后台之前未处理的对该方法的调用
      • 通过NSURLSessionTaskDelegate: -> URLSession:dataTask:didReceiveData:
      • 通过NSURLSessionTaskDelegate -> NSURLSession:task:didCompleteWithError:
      • 通过NSURLSessionDelegate -> :URLSessionDidFinishEventsForBackgroundURLSession:
      • iOS 为应用程序提供了总共 30 秒的时间在后台处理下载结束,然后暂停应用程序

    我还在 github here 上放了一个非常基本的 NSURLSessionUploadTask 示例应用程序和网络服务器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-31
      • 2010-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-15
      相关资源
      最近更新 更多