Ios 当应用程序挂起时,如何知道NSURLSessionPloadTask是否工作?

Ios 当应用程序挂起时,如何知道NSURLSessionPloadTask是否工作?,ios,nsurlsessionuploadtask,Ios,Nsurlsessionuploadtask,当我的应用程序在前台运行时,我会看到定期调用:NSURLSessionTaskDelegate->URLSession:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend: 当我的应用程序移到后台并挂起时,对该方法的调用将停止,因此我对NSURLSessionPloadTask是否继续上载没有反馈。有什么技巧可以获得上传的反馈吗?通过查看其他关于NSURLSessionUploadTask的StackOverflow帖子,我可

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


当我的应用程序移到后台并挂起时,对该方法的调用将停止,因此我对NSURLSessionPloadTask是否继续上载没有反馈。有什么技巧可以获得上传的反馈吗?

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

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

  • 使用
    仪器
    捕获流程的网络流量
    nsurlsessiond

  • 等待上载完成。如果您的应用程序位于后台,并在上载完成时挂起,则iOS会将您的应用程序从挂起状态移动到在后台积极运行,并按以下顺序调用以下方法:
    • 通过
      NSURLSessionTaskDelegate->URLSession:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:
      可以调用在应用程序进入后台之前未处理的对此方法的某些调用
    • 通过
      NSURLSessionTaskDelegate:->URLSession:dataTask:didReceiveData:
    • 通过
      NSURLSessionTaskDelegate->NSURLSession:task:didcompletewitheror:
    • 通过
      nsurlsessionelegate->:urlsessiondifinisheventsforbackgroundurlsession:
    • iOS为应用程序提供30秒的总时间,以便在挂起应用程序之前在后台处理下载结束
我还在github上放置了一个非常基本的NSURLSessionUploadTask示例应用程序和Web服务器