无法确定应用程序终止时会发生什么。
查看appleWillTerminate的苹果文档,它说:
对于不支持后台执行或与iOS 3.x或更早版本链接的应用,当用户退出应用时,始终会调用此方法。对于支持后台执行的应用程序,当用户退出应用程序时通常不调用此方法,因为在这种情况下应用程序只是移动到后台。但是,在应用程序运行的情况下可能会调用此方法后台(未暂停),系统需要因某种原因终止它。
支持后台执行的应用程序是什么意思?是否意味着必须在应用程序的设置中启用“后台处理”,还是指旧版本的iOS?
为什么应用程序进入后台而不是终止?它会在后台停留多长时间?
我想在应用程序进入后台时更新Parse后端中的对象,我这样做:
- (void)applicationDidEnterBackground:(UIApplication *)application
{
bgTask = [application beginBackgroundTaskWithName:@"MyTask" expirationHandler:^{
//End the Task
[application endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
if([self getController]){
CatsViewController *catsViewController = [self getController];
if(catsViewController.currentUser){
int count = (int)[MyViewController.currentUser.messages count];
PFInstallation *currentInstallation = [PFInstallation currentInstallation];
currentInstallation.badge = count;
[currentInstallation saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
[application endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}];
}
else{
[application endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}
}
else{
[application endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}
});
}
从文档中可以看出,当应用程序被刷卡终止时,这将不会是100%。如果是这种情况,那么如何保存我的数据呢?
答案 0 :(得分:1)
从> = ios4按主页按钮后,您的应用进入暂停状态。这意味着该应用程序不再运行,但它继续占用一定量的系统内存,以便在前台快速恢复。
来自> = ios4 Apple已经为某种类型的应用程序引入了真正的后台执行,例如:位置更新,ip上的语音等。您可以通过查看项目功能 - >背景模式获得完整列表。如果您的应用需要在后台运行,则必须满足其中一个要求,并且您应该在项目plist中指定此要求。
那些应用程序有一些特权。如果系统内存不足并且前台应用程序需要的内存大于可用数量,则系统会首先杀死已暂停的应用程序,如果仍需要更多内存,则它只会杀死在后台运行的应用程序。在这种情况下,-applicationWillTerminate
被调用。
此方法也由不支持暂停或后台模式的应用程序调用。