我使用此代碼創建一個後臺會話恢復...NSURLSessionDownloadTask攤位的背景下,緩慢前景
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文件。
我可以在前臺運行四個併發下載,沒有問題。所有預期的委託方法都被調用並且傳輸以正常的速度完成。
我看到的問題是,如果我在前臺開始下載並點擊主頁按鈕,則下載有時會停止。我試着讓設備保持清醒狀態,網絡旋轉了一個小時,傳輸仍然沒有在後臺完成。此外,當我將應用程序帶回前臺時,傳輸不會立即再次啓動。如果我讓應用程序坐在前臺大約4分鐘,他們會醒來並重新開始工作。他們以應用程序進入後臺時完成的百分比恢復,並以正常速度傳輸直至完成。在任何時候都沒有任何錯誤,並且轉移最終是成功的。它只是在背景中「消失」,並且在應用程序回到前臺時恢復非常緩慢。
我在運行iOS 10的iPhone 6上測試。我沒有連接到Xcode或外部電源,我正在啓動應用程序。我可以通過WiFi和蜂窩連接重現問題。我刪除了應用程序並重新加載了多次。
我無法跟蹤這個問題,因爲大約20%的時間工作正常。我沒有找到任何導致它一致工作或失敗的特定變量。當發生多次下載時,它似乎更頻繁地發生,並且在這種情況下,所有下載都會顯示上述行爲。
任何指導將不勝感激!
馬特
您是否嘗試過其他會話配置?不是背景 – iWheelBuy