IOS-应用程序生命周期(前后台切换,应用的各种状态)详解

来源:互联网 发布:财慧网软件下载 编辑:程序博客网 时间:2024/04/28 12:56

Not running 未运行 程序没启动
Inactive 未激活 程序在前台运行,不过没有接收到事件。在没有事件处理情况下程序通常停留在这个状态

Active 激活 程序在前台运行而且接收到了事件。这也是前台的一个正常的模式

Backgroud 后台 程序在后台而且能执行代码,大多数程序进入这个状态后会在在这个状态上停留一会。时间到之后会进入挂起状态(Suspended)。有的程序经过特殊的请求后可以长期处于Backgroud状态

Suspended 挂起 程序在后台不能执行代码。系统会自动把程序变成这个状态而且不会发出通知。当挂起时,程序还是停留在内存中的,当系统内存低时,系统就把挂起的程序清除掉,为前台程序提供更多的内存。

各个程序运行状态时代理的回调:

-(BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions      告诉代理进程启动但还没进入状态保存- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions     告诉代理启动基本完成程序准备开始运行- (void)applicationWillResignActive:(UIApplication *)application    当应用程序将要入非活动状态执行,在此期间,应用程序不接收消息或事件,比如来电话了- (void)applicationDidBecomeActive:(UIApplication *)application      当应用程序入活动状态执行,这个刚好跟上面那个方法相反- (void)applicationDidEnterBackground:(UIApplication *)application    当程序被推送到后台的时候调用。所以要设置后台继续运行,则在这个函数里面设置即可- (void)applicationWillEnterForeground:(UIApplication *)application当程序从后台将要重新回到前台时候调用,这个刚好跟上面的那个方法相反。- (void)applicationWillTerminate:(UIApplication *)application当程序将要退出是被调用,通常是用来保存数据和一些退出前的清理工作。这个需要要设置UIApplicationExitsOnSuspend的键值。- (void)applicationDidFinishLaunching:(UIApplication*)application当程序载入后执行

在上面8个方法对应的方法中键入NSLog打印。

现在启动程序看看执行的顺序:

启动程序
lifeCycle[40428:11303] willFinishLaunchingWithOptions
lifeCycle[40428:11303] didFinishLaunchingWithOptions
lifeCycle[40428:11303] applicationDidBecomeActive

按下home键
lifeCycle[40428:11303] applicationWillResignActive
lifeCycle[40428:11303] applicationDidEnterBackground

双击home键,再打开程序
lifeCycle[40428:11303] applicationWillEnterForeground
lifeCycle[40428:11303] applicationDidBecomeActive

详解

一、挂起
当有电话进来或者锁屏,这时你的应用程会挂起,在这时,UIApplicationDelegate委托会收到通知,调用 applicationWillResignActive 方法,你可以重写这个方法,做挂起前的工作,比如关闭网络,保存数据。

C代码  1. - (void)applicationWillResignActive:(UIApplication*)application{    2.     3. } 

当你的程序被挂起后他不会在后台运行。

二、复原

当程序复原时,另一个名为 applicationDidBecomeActive 委托方法会被调用,在此你可以通过之前挂起前保存的数据来恢复你的应用程序:

C代码

1. -(void)applicationDidBecomeActive:(UIApplication*)application{    2.     3. }    

注意:应用程序在启动时,在调用了 applicationDidFinishLaunching 方法之后也会调用 applicationDidBecomeActive 方法,所以你要确保你的代码能够分清复原与启动,避免出现逻辑上的bug。

三、终止

当用户按下按钮,或者关机,程序都会被终止。当一个程序将要正常终止时会调用 applicationWillTerminate方法。但是如果长主按钮强制退出,则不会调用该方法。这个方法该执行剩下的清理工作,比如所有的连接都能正常关闭,并在程序退出前执行任何其他的必要的工作:

C代码  1. - (void)applicationWillTerminate:(UIApplication*)application{    2.     3. }    
1. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions  2. {  3.     // Override point for customization after application launch.  4.     NSLog(@"\n ===> 程序开始 !");   5.       6.     return YES;  7. }  8.                               9. - (void)applicationWillResignActive:(UIApplication *)application  10. {  11.       12.     NSLog(@"\n ===> 程序暂行 !");   13. }  14.   15. - (void)applicationDidEnterBackground:(UIApplication *)application  16. {  17.       18.      NSLog(@"\n ===> 程序进入后台 !");   19. }  20.   21. - (void)applicationWillEnterForeground:(UIApplication *)application  22. {  23.       24.      NSLog(@"\n ===> 程序进入前台 !");   25. }  26.   27. - (void)applicationDidBecomeActive:(UIApplication *)application  28. {  29.     NSLog(@"\n ===> 程序重新激活 !");   30.       31. }  32.   33. - (void)applicationWillTerminate:(UIApplication *)application  34. {  35.     NSLog(@"\n ===> 程序意外暂行 !");   36.   37.     UIDevice *device = [UIDevice currentDevice];  38.       39. }  
首次运行:- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions- (void)applicationDidBecomeActive:(UIApplication *)application首次关闭(home):- (void)applicationWillResignActive:(UIApplication *)application- (void)applicationDidEnterBackground:(UIApplication *)application再次运行:- (void)applicationWillEnterForeground:(UIApplication *)application- (void)applicationDidBecomeActive:(UIApplication *)application再次关闭:- (void)applicationWillResignActive:(UIApplication *)application- (void)applicationDidEnterBackground:(UIApplication *)application

参考链接:http://blog.csdn.net/totogo2010/article/details/8048652/

0 0
原创粉丝点击