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/
- iOS -- 应用程序生命周期(前后台切换,应用的各种状态)
- iOS开发之iOS应用程序生命周期(前后台切换,应用的各种状态)详解
- iOS开发系列--iOS应用程序生命周期(前后台切换,应用的各种状态)详解
- iOS应用程序生命周期(前后台切换,应用的各种状态)详解
- iOS应用程序生命周期(前后台切换,应用的各种状态)详解
- iOS应用程序生命周期(前后台切换,应用的各种状态)详解
- iOS应用程序生命周期(前后台切换,应用的各种状态)详解 .
- iOS应用程序生命周期(前后台切换,应用的各种状态)详解
- iOS应用程序生命周期(前后台切换,应用的各种状态)详解
- iOS应用程序生命周期(前后台切换,应用的各种状态)详解
- iOS应用程序生命周期(前后台切换,应用的各种状态)详解
- iOS应用程序生命周期(前后台切换,应用的各种状态)详解
- iOS应用程序生命周期(前后台切换,应用的各种状态)详解
- iOS应用程序生命周期(前后台切换,应用的各种状态)详解
- iOS应用程序生命周期(前后台切换,应用的各种状态)详解
- iOS应用程序生命周期(前后台切换,应用的各种状态)详解
- iOS应用程序生命周期(前后台切换,应用的各种状态)详解
- iOS应用程序生命周期(前后台切换,应用的各种状态)详解
- poj_3150 Cellular Automaton(循环矩阵+矩阵乘法)
- mySQL更改端口与允许客户端访问
- 【设计模式】模板方法模式
- spring加载hibernate映射文件的几种方式
- Android基础控件——TabLayout的使用、仿爱奇艺导航条
- IOS-应用程序生命周期(前后台切换,应用的各种状态)详解
- Java finally语句到底是在return之前还是之后执行?
- Windows下SVNServer安装和配置
- Lua基础(图)
- 程序员面试金典: 9.4树与图 4.2给定有向图,设计一个算法,找出两个节点之间是否存在一条路径。
- Tomcat 部署我的第一个程序
- android常用技巧
- unity3d开发android小游戏版本版本更新后自动安装功能的实现
- 来自GitHub上的手机meta标签