Mat*_*rty 5 background transfer ios nsurlsession nsurlsessiondownloadtask
我正在使用此代码创建后台会话...
let configuration = URLSessionConfiguration.background(withIdentifier: UUID().uuidString)
configuration.sessionSendsLaunchEvents = true
configuration.isDiscretionary = false
self.session = Foundation.URLSession(configuration: configuration, delegate: self, delegateQueue: nil)
Run Code Online (Sandbox Code Playgroud)
...并使用以下代码下载任务:
let downloadTask = self.session.downloadTask(with: request as URLRequest)
downloadTask.resume()
Run Code Online (Sandbox Code Playgroud)
我的请求对象如下所示:
let request = NSMutableURLRequest(url: someURL)
request.httpMethod = "POST"
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
do {
try request.httpBody = JSONSerialization.data(withJSONObject: someDictionary, options: JSONSerialization.WritingOptions())
} catch let error as NSError {
// logging calls
}
Run Code Online (Sandbox Code Playgroud)
正在下载的资源是大约20MB的zip文件.
我可以在前台运行四个并发下载而没有任何问题.调用所有预期的委托方法,并以正常速度完成传输.
我看到的问题是,如果我在前台开始下载然后点击主页按钮,下载有时会停止.我已经尝试保持设备唤醒,网络旋转一小时,传输仍然无法在后台完成.此外,当我将应用程序带回前台时,传输不会立即重新开始.如果我让应用程序坐在前台约4分钟,他们会醒来并重新开始工作.它们以应用程序进入后台时的完成百分比恢复,并将以正常速度传输直至完成.在任何时候都没有任何错误,转移最终是成功的.它只是在后台"消失",当应用程序回到前台时恢复非常慢.
我在运行iOS 10的iPhone 6上进行测试.我没有连接到Xcode或外部电源,我正在推出应用程序.我可以通过WiFi和蜂窝连接重现这个问题.我删除了该应用并重新加载了多次.
我无法跟踪此问题,因为大约20%的时间它工作正常.我没有发现任何特定的变量集导致它一致地工作或失败.当发生多次下载时,似乎更频繁地发生,并且在那种情况下,所有下载都表现出上述行为.
任何指导将不胜感激!
马特
您所描述的行为听起来像是 iOS 中的错误,但我会尝试以下一些操作:
\n\n最后两个都没有帮助,如果有帮助,请提交错误。
\n\n另外,IIRC,如果您的应用程序在后台重新启动太多次,它可能会受到惩罚,因此,如果您在后台任务中发出一堆短请求,您可能不应该这样做。如果您的应用程序在后台重新启动时崩溃,那也可能非常糟糕。
\n\n最后,确保您只是进入主屏幕。如果您强制退出应用程序(双击、滑动),后台请求将被终止。这是预期的行为。
\n\n如果这些提示都没有帮助,请在 bugreporter.apple.com 上提交错误报告,因为您所描述的不是预期的行为。
\n| 归档时间: |
|
| 查看次数: |
819 次 |
| 最近记录: |