applicationWillTerminate进入后台

时间:2015-06-25 11:48:23

标签: ios objective-c

无法确定应用程序终止时会发生什么。

查看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%。如果是这种情况,那么如何保存我的数据呢?

1 个答案:

答案 0 :(得分:1)

从> = ios4按主页按钮后,您的应用进入暂停状态。这意味着该应用程序不再运行,但它继续占用一定量的系统内存,以便在前台快速恢复。
来自> = ios4 Apple已经为某种类型的应用程序引入了真正的后台执行,例如:位置更新,ip上的语音等。您可以通过查看项目功能 - >背景模式获得完整列表。如果您的应用需要在后台运行,则必须满足其中一个要求,并且您应该在项目plist中指定此要求。
那些应用程序有一些特权。如果系统内存不足并且前台应用程序需要的内存大于可用数量,则系统会首先杀死已暂停的应用程序,如果仍需要更多内存,则它只会杀死在后台运行的应用程序。在这种情况下,-applicationWillTerminate被调用。
此方法也由不支持暂停或后台模式的应用程序调用。