gpt4 book ai didi

ios - NSURLSessionDownloadTask 在后台停止,在前台恢复缓慢

转载 作者:可可西里 更新时间:2023-11-01 04:55:53 24 4
gpt4 key购买 nike

我正在使用这段代码创建一个后台 session ...

    let configuration = URLSessionConfiguration.background(withIdentifier: UUID().uuidString)  
configuration.sessionSendsLaunchEvents = true
configuration.isDiscretionary = false
self.session = Foundation.URLSession(configuration: configuration, delegate: self, delegateQueue: nil)

...并使用此代码下载任务:

    let downloadTask = self.session.downloadTask(with: request as URLRequest)         
downloadTask.resume()

我的请求对象如下所示:

    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
}

正在下载的资源是大约 20MB 的 zip 文件。

我可以在前台运行四个并发下载,没有任何问题。调用所有预期的委托(delegate)方法并以正常速度完成传输。

我遇到的问题是,如果我在前台开始下载然后点击主页按钮,下载有时会停止。我已尝试让设备保持唤醒状态,网络启动了一个小时,但传输仍未在后台完成。此外,当我将应用程序带回前台时,传输不会立即重新开始。如果我让应用程序在前台停留约 4 分钟,它们就会醒来并重新开始工作。它们以应用程序进入后台时的完成百分比恢复,并将以正常速度传输直到完成。任何时候都没有任何错误,最终传输成功。它只是在后台“消失”,当应用返回前台时恢复速度非常慢。

我正在运行 iOS 10 的 iPhone 6 上进行测试。我没有连接到 Xcode 或外部电源,我正在冷启动应用程序。我可以通过 WiFi 和蜂窝连接重现该问题。我删除了该应用程序并重新加载了多次。

我很难追踪到它,因为大约 20% 的时间它工作正常。我还没有发现任何特定的变量集会导致它持续工作或失败。当发生多个下载时,它似乎更频繁地发生,并且在这种情况下所有下载都表现出上述行为。

任何指导将不胜感激!

马特

最佳答案

您描述的行为听起来像是 iOS 中的一个错误,但我会尝试的一些事情是:

  • 尝试将 discretionary 设置为 YES。这限制了后台重新启动的速度。
  • 确保您不会在单次启动期间意外创建一个与现有 session 具有相同 ID 的新后台 session (除非您刚刚重新启动以处理事件,并且仅在调用完成处理程序之后)。
  • 确保您没有创建任何相关类的子类——尤其是 NSURL 或 NSURLRequest。
  • 尝试将 shouldUseExtendedBackgroundIdleMode 设置为 YES。
  • 尝试在 UIBackgroundModes 中添加启用后台获取。

最后两个都不应该有帮助,如果有帮助,请提交错误。

此外,IIRC,如果您的应用在后台重新启动的次数过多,它可能会受到惩罚,因此如果您在后台任务中发出一堆短请求,您可能不应该这么做。如果您的应用在后台重新启动时崩溃,那也可能非常糟糕。

最后,确保您只是转到主屏幕。如果您强制退出应用程序(双击、滑动),后台请求将被终止。这是预期的行为。

如果这些提示都没有帮助,请在 bugreporter.apple.com 提交错误报告,因为您描述的不是预期的行为。

关于ios - NSURLSessionDownloadTask 在后台停止,在前台恢复缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39836964/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com