iOS 앱의 포 그라운드 종료 후 작업 완료에 대한 지원을 추가하려고합니다. 내가 인터넷에서 본 모든 자습서는 응용 프로그램 위임이 뭔가를 쓰는 날 지점 :iOS 백그라운드 작업 완료 프로그래밍
- (void)applicationDidEnterBackground:(UIApplication *)application {
if ([[UIDevice currentDevice] isMultitaskingSupported]) {
UIApplication *application = [UIApplication sharedApplication];
__block UIBackgroundTaskIdentifier background_task;
background_task = [application beginBackgroundTaskWithExpirationHandler:^{
[application endBackgroundTask: background_task];
background_task = UIBackgroundTaskInvalid;
}];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//DO STUFF IN BACKGROUND HERE
MyTask *task = [[MyTask alloc] initWithURL:@"http://google.com"];
[task setDelegate:self];
[task start];
[application endBackgroundTask: background_task];
background_task = UIBackgroundTaskInvalid;
});
}
}
작업은 시작할 수 있지만이 시작된 후, 다음 줄이 처리됩니다 내 애플 리케이션이 살해된다. MyTask
이 델리게이트 호출로 인해 멈출 때를 알 수 있지만 델리게이트가 호출 된 후 백그라운드 작업이 유효하지 않게 설정되도록 프로그램을 어떻게 변경합니까? 이동하겠습니까?
[application endBackgroundTask: background_task];
background_task = UIBackgroundTaskInvalid;
위임 기능을 수행하거나 다른 작업을 수행해야합니까? 당신의 도움에 미리
감사합니다, Guvvy
을 방문하십시오. 안녕하세요. @ djibouti33은 "내 제안은 당신이 리팩토링하는 것이므로 동기입니다."라고 말하려고 노력합니다. . 600 초 후에 NStimer 호출 메서드를 사용하고 있습니다. 하지만 앱이 백그라운드로 갈 때 bgTask가 즉시 만료됩니다. –
[작업 시작] 메서드는 비동기 메서드였습니다. 즉, 작업이 수행되기 전에 즉시 반환 된 다음 background_task가 종료되었음을 의미합니다. 내 동기 만들기, 메서드가 완료 될 때까지 다른 실행을 차단하고 background_task 성공적으로 및 올바른 시간에 죽일 수 있습니다. – djibouti33