2

バックグラウンドで 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 秒程度の遅延が発生する場合があります。

4

3 に答える 3

0
-(NSURLSession *)backgroundSession // For Background Download
{
static NSURLSession *backgroundSession = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
    NSURLSessionConfiguration *config = [NSURLSessionConfiguration backgroundSessionConfiguration:@"com.shinobicontrols.BackgroundDownload.BackgroundSession"];
    backgroundSession = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:nil];
});
return backgroundSession;
}

詳細については、この LINKを確認してください。ここでは、さまざまなダウンロード方法があることがわかります。ここで解決策が得られることを願っています。

于 2014-02-19T06:24:01.250 に答える