当应用程序挂起时,我如何知道 NSURLSessionUploadTask 是不是正在工作?
Posted
技术标签:
【中文标题】当应用程序挂起时,我如何知道 NSURLSessionUploadTask 是不是正在工作?【英文标题】: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 是否继续上传的反馈。是否有任何技术可以获取有关上传的反馈?
【问题讨论】:
【参考方案1】:通过查看有关 NSURLSessionUploadTask
的其他 *** 帖子,我可以看到对此功能有很多困惑。以下是我发现的一些有助于减少这种混淆的反馈机制:
使用网络代理和数据包嗅探器,如 Wireshark(有关详细信息,请参阅 this)。过滤除进出您将文件上传到的服务器的流量之外的所有流量。查找来自服务器的 HTTP 响应 (200) 和来自 ios 设备的 FIN,ACK
以表明上传已完成并且已收到响应。您还可以使用数据包嗅探器来诊断上传问题。
使用Instruments
捕获进程nsurlsessiond
的网络流量
NSURLSessionTaskDelegate -> URLSession:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:
可能会调用一些在应用程序进入后台之前未处理的对该方法的调用
通过NSURLSessionTaskDelegate: -> URLSession:dataTask:didReceiveData:
通过NSURLSessionTaskDelegate -> NSURLSession:task:didCompleteWithError:
通过NSURLSessionDelegate -> :URLSessionDidFinishEventsForBackgroundURLSession:
iOS 为应用程序提供了总共 30 秒的时间在后台处理下载结束,然后暂停应用程序
我还在 github here 上放了一个非常基本的 NSURLSessionUploadTask 示例应用程序和网络服务器。
【讨论】:
以上是关于当应用程序挂起时,我如何知道 NSURLSessionUploadTask 是不是正在工作?的主要内容,如果未能解决你的问题,请参考以下文章
应用程序挂起时如何使用 UIApplicationLaunchOptionsLocationKey 监视地理围栏区域
应用程序在挂起时静默终止。 (用户在我的应用程序上按下锁定按钮)
NSURLSessionDownloadTask 在挂起时继续下载