应用程序暂停时,如何知道NSURLSessionUploadTask是否正常工作?

时间:2015-10-30 17:08:14

标签: ios nsurlsessionuploadtask

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

当我的应用程序移至后台并暂停时,对此方法的调用将停止,因此我对NSURLSessionUploadTask是否继续上载没有任何反馈。是否有任何技术可以获得有关上传的反馈?

1 个答案:

答案 0 :(得分:2)

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

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

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

Instruments capture for nsurlsessiond

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

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