我试图增加对退出我的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
hi @ djibouti33你可以详细说明你试图说的话:“我的建议是重构[任务开始],所以它是同步的。” 。我在600秒后使用NStimer调用方法。但bgTask瞬间过期的应用程序进入后台 –
方法[任务开始]是一个异步方法,这意味着它立即返回(进行任何工作之前),然后background_task被打死。我使它同步,该方法将阻止任何其他执行,直到它完成,然后可以在正确的时间成功地终止background_task。 – djibouti33