当程序进入后台后想做一些事情应该将代码写在哪个方法里边?

参考链接:

http://www.programering.com/a/MzN0gDNwATQ.html

苹果官方解释:

1、该方法是在程序将被终止的时候调用。一般用它来执行最后的清理任务,如释放共享资源,节约了用户数据和无效定时器。此方法的实现有大约五秒钟执行任何任务并返回。如果时间到期之前的方法没有返回,系统可能会完全终止进程。

2、对于不支持后台执行或者是针对iOS的3.x或更早链接的应用程序,当用户退出应用程序这个方法总是被调用。对于支持后台执行的应用程序,当用户退出应用程序,因为应用程序简单地移动到在这种情况下,背景通常不调用此方法。然而,这种方法可以在其中应用程序在后台运行的情况下被调用(不暂停)和系统需要终止它由于某种原因。

3、这本字典,我们可以知道,苹果公司表示,这样的事情:的方式让你知道它会很快被用来杀死,并从内存中完全删除。你应该使用这个方法来执行任何应用程序最后的清理工作,如资源共享的释放,保存用户数据,计时器故障,约5秒钟来执行任务,返回途中,如果方法不及时返回到故障,则该系统可能会终止该进程。

4、对于不支持后台执行或在ios3.x以及之前当用户关闭了该方法的应用这些应用,将总是被调用。在执行时的应用背景,在用户关闭时,它一般不称为应用程序,因为在这种情况下,只需移动到背景中。那么,什么时候调用此方法?当应用程序仍然在后台运行(而不是在后台暂停),但由于某种原因需要关闭它时,这种方法可能会被调用。

+++++++++++++++++++++++++++++

网上有这么一个模拟的例子:

按以下步骤进行操作:

步骤一:

在Info.plist里边设置
Application does not run in background为 YES

当程序进入后台后想做一些事情应该将代码写在哪个方法里边?_第1张图片
配置Info.plist

步骤二:将以下代码黏贴到你的工程中就会输出下面的结果。

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    NSLog(@"%s", __PRETTY_FUNCTION__);
    __block UIBackgroundTaskIdentifier identifier = [[UIApplication sharedApplication]beginBackgroundTaskWithExpirationHandler:^{
        if (identifier != UIBackgroundTaskInvalid) {
            [[UIApplication sharedApplication] endBackgroundTask:identifier];
            identifier = UIBackgroundTaskInvalid;
        }
    }];
    dispatch_async(dispatch_get_main_queue(), ^{
        for (int i=0; i <20; i++) {
            NSLog(@"%d", i);
            sleep(1);
        }
        if (identifier != UIBackgroundTaskInvalid) {
            [[UIApplication sharedApplication] endBackgroundTask:identifier];
            identifier = UIBackgroundTaskInvalid;
        }
    });
}

- (void)applicationWillTerminate:(UIApplication *)application
{
    [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"testKey"];
    [[NSUserDefaults standardUserDefaults] synchronize];
    NSLog(@"%s", __PRETTY_FUNCTION__);
}

显示的结果为:

当程序进入后台后想做一些事情应该将代码写在哪个方法里边?_第2张图片
显示结果

温馨提示:以上两个步骤操作完了之后,无论是在真机上还是在模拟器上,都一定要运行起来后将程序退入到后台才能看出效果。《真机运行后按住Home键退入到后台》《模拟器运行后按住command + shift + H退入到后台》。

你可能感兴趣的:(当程序进入后台后想做一些事情应该将代码写在哪个方法里边?)