当应用程序进入后台时,我必须执行长时间运行的清理操作。由于清理操作是一个网络事务,需要 5 秒以上,我正在使用 beginBackgroundTaskWithExpirationHandler: API,一切都运行良好。
下面我添加代码以获得更好的清晰度..
- (void)applicationDidEnterBackground:(UIApplication *)application {
@synchronized(self)
{
bgTask = [application beginBackgroundTaskWithExpirationHandler:^{
[application endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
[self performCleanUpOperation];
[application endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
});
}
}
- (void) performCleanUpOperation
{
// Cleanup Network Operation
[(NSObject *)self performSelectorOnMainThread:(@selector(cleanUpDidFinish)) withObject:nil waitUntilDone:NO];
}
- (void) cleanUpDidFinish
{
dispatch_async(dispatch_get_main_queue(), ^(void){
[self saveContext];
[(CustomUIApplication *)[UIApplication sharedApplication] logoutWithAlert:NO];
[[UIApplication sharedApplication] endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
});
}
现在我面临的问题是,当我将应用程序带到前台时,我看到的是应用程序在进入后台之前的旧屏幕。并立即从旧屏幕导航到登录屏幕。
知道为什么在应用程序重新启动时它没有显示登录屏幕,即使我已经在 cleanUpDidFinish 中加载了登录 ViewController。