私はこのコードを使用してバックグラウンドセッションを作成していますで回復が遅く、バックグラウンドで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回の同時ダウンロードを実行できますが、問題はありません。予想されるすべてのデリゲートメソッドが呼び出され、転送は通常の速度で完了します。
私が見ている問題は、フォアグラウンドでダウンロードを開始してからホームボタンを押すとダウンロードが停止することがあるということです。私はデバイスを目覚めさせようとしたが、ネットワークは1時間スピンアップし、転送はまだバックグラウンドで完了していない。さらに、アプリをフォアグラウンドに戻すと、転送がすぐに再び開始されることはありません。アプリをフォアグラウンドで約4分間座らせると、目を覚まして再び作業を開始します。彼らは、アプリがバックグラウンドに入ったときの完全なパーセンテージで再開し、完了するまで通常の速度で転送します。決してエラーはありません。転送は最終的には成功です。バックグラウンドでは「離れて」いるだけで、アプリがフォアグラウンドに戻ったときに再開するのは非常に遅いです。
iOS 10を実行しているiPhone 6でテストしています。私はXcodeや外部電源に接続していないため、アプリケーションを寒いです。 WiFiと携帯電話の両方の接続で問題を再現できます。私は、アプリケーションを削除し、それを複数回再読み込みしました。
正常に動作している時間の約20%が原因でこれを追跡できません。私はそれが一貫して機能するか失敗するかの特定の変数セットを発見していません。複数のダウンロードが発生している場合、より頻繁に発生するように見えます。その状況では、すべてのダウンロードが上記の動作を示します。
ご指摘いただければ幸いです!
マット
別のセッション構成を試しましたか?背景のものではない – iWheelBuy