일부 작업이있는 발송 대기열이 있습니다. 응용 프로그램이 백그라운드로 들어가면 대기열이 다 소모되거나 대기열이 모두 소모 될 때까지 대기열이 계속 실행되기를 원합니다. UIBackgroundTaskIdentifier를 어떻게 설정합니까?GCD 및 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;
}
});
나는 큐가 실제로 블록을 실행까지가 장기 실행 작업으로 등록되지 않은되고 위에서 무슨 생각합니다. 그래서 블록의 외부에있는 코드의 backgrounding 부분을 놓아야 만 실제로 큐에 들어가기 전에 실행해야합니까?