バックグラウンドで NSURLSessionDownloadTask を実行しようとしています。ただし、タスクが実際に開始されるまでに約 30 秒かかることに気付きました。defaultSessionConfiguration を使用すると、タスクはほとんどすぐに開始されます。backgroundSessionConfiguration を使用するときに NSURLSessionDownloadTask をすぐにトリガーする方法はありますか?
以下は、backgroundSessionConfiguration を使用したときに得られる結果です。
NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration backgroundSessionConfiguration:[NSString stringWithFormat:bgIdentifier, self.urlModel.code]];
ログ出力は次のとおりです。「アップロードの開始…」は「再開」メソッドを呼び出す直前に記録され、「アップロードの進行状況」は NSURLSessionTaskDelegate の didSendData メソッドに記録されることに注意してください。
2014-02-18 20:13:55.403 myapp[396:60b] [DoneViewController] Start uploading...
2014-02-18 20:14:17.699 myapp[396:60b] [DoneViewController] Upload progress - 1%
2014-02-18 20:14:17.704 myapp[396:60b] [DoneViewController] Upload progress - 2%
2014-02-18 20:14:17.705 myapp[396:60b] [DoneViewController] Upload progress - 3%
2014-02-18 20:14:17.706 myapp[396:60b] [DoneViewController] Upload progress - 4%
参考までに、同じことですが、デフォルトのセッション構成を使用します。
NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];
コンソールに遅延がないことがわかります。結果は次のようになります。
2014-02-18 19:57:00.552 myapp[376:60b] [DoneViewController] Start uploading...
2014-02-18 19:57:00.707 myapp[376:60b] [DoneViewController] Upload progress - 2%
2014-02-18 19:57:00.710 myapp[376:60b] [DoneViewController] Upload progress - 5%
2014-02-18 19:57:00.711 myapp[376:60b] [DoneViewController] Upload progress - 8%
2014-02-18 19:57:00.711 myapp[376:60b] [DoneViewController] Upload progress - 11%
編集: iOS 7.1 では、遅延がない場合があります。ただし、それでも 20 秒程度の遅延が発生する場合があります。