いくつかの作業が含まれているディスパッチキューがあります。アプリケーションがバックグラウンドに移行したときに、時間がなくなるかキューが空になるまで、キューを実行し続けたいと思います。UIBackgroundTaskIdentifierをどのように設定しますか?
そのようにディスパッチブロックに入れる必要がありますか?
dispatch_async(queue, ^{
if (_bgTask == UIBackgroundTaskInvalid) {
if ([UIDevice currentDevice].multitaskingSupported) {
_bgTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^(void) {
if (_bgTask != UIBackgroundTaskInvalid) {
[[UIApplication sharedApplication] endBackgroundTask:_bgTask];
_bgTask = UIBackgroundTaskInvalid;
}
}];
}
}
...
...
if (_bgTask != UIBackgroundTaskInvalid) {
[[UIApplication sharedApplication] endBackgroundTask:_bgTask];
_bgTask = UIBackgroundTaskInvalid;
}
});
上記で起こったことは、キューが実際にブロックを実行するまで、長時間実行タスクとして登録されないことだと思います。それで、実際にキューに入れられる前に実行されるように、コードの背景部分をブロックの外側に配置する必要がありますか?