iOS application生命周期研究、发现与总结
2013-09-13 23:51
399 查看
前言:不积跬步,无以至千里;不积小流,无以成江河!既然选择做开发,就要做到让自己满意。
今天主要研究了一下Application的生命周期,如下。
一、Application的几种状态。
1)Not running 未运行
未运行状态就是程序的初始状态,程序处于这种状态时有三种可能。
1、设备刚启动。
2、程序处于暂停状态,且在系统内存紧张时,程序被系统Kill掉。
3、程序因为错误而崩溃。
2)Inactive 不活动
一般是一种过渡的状态,或者应用在被中断(不能响应消息)时也会进入此种状态:
1、应用程序在两个其他状态之间转化会在短时间内处于此状态。
2、系统提示的打断(短信、电话、锁屏)会使应用进入此状态:
不处理短信和电话会使应用一直处在不活动状态,而锁屏后在小段时间内会进入后台。
3)Active 活动
程序在前台运行的正常状态,能够接收到事件,最普通的状态。
4)Background 后台
程序在后台运行的状态,但是大多数都不会太久,会在时间到了之后转化为暂停状态。但是也有可能通过一些方式使得程序长时间停留在后台。
按下Home键之后,所有程序都会进入后台状态。
5)Suspended 暂停(挂起)
程序在暂停时不能执行代码、但是不会被释放内存。但是当系统内存不足的情况下,暂停的程序有可能会被释放。
如图所示:
1、活动与不活动状态之间转化:应用被系统中断的情况,用户没有转向中断程序,而返回原应用。
2、活动->不活动->后台->不活动->活动:应用被系统中断,用户转向处理,此时应用进入后台,在用户处理完成任务之后再次启动应用。
3、暂停到未运行:应用因系统内存紧张被杀死。
二、 应用程序的生命周期
1)主要声明周期
在iOS中,主要是一下几个委托回调来作用着应用的生命周期。
application:didFinishLaunchingWithOptions
applicationWillResignActive
applicationDidEnterBackground
applicationWillEnterForeground
applicationDidBecomeActive
applicationWillTerminate
我们对此进行测试:
注:NSStringFromSelector(_cmd)的作用是返回当前方法名。
让我们看看,在一下几种情况下,这几个委托方法的执行顺序。
1、启动程序:
application:didFinishLaunchingWithOptions:
applicationDidBecomeActive:
2、按下Home键:程序进入后台,很快会进入暂停状态,但是暂停状态没有可以回调的函数。
applicationWillResignActive:
applicationDidEnterBackground:
3、回到程序:
applicationWillEnterForeground:
applicationDidBecomeActive:
4、短信打断:此时程序进入了不活动状态,而不是后台。
applicationWillResignActive:
4-1如果进入编辑短信:现在才进入后台。
applicationDidEnterBackground:
4-2退出短信
[b] applicationDidBecomeActive
[/b]
5、双击Home键,强行关闭程序:
但没有任何Log信息,说明程序从暂停变为未运行状态时,没有调用applicationWillTerminate方法!
那么什么时候applicationWillTerminate会被调用呢?答案是从后台变为未运行状态时,因为此时程序有时间反应。
三、每个生命周期的职能
那么每个回调中应该执行什么操作呢?
application:didFinishLaunchingWithOptions:程序初始化。
applicationWillResignActive:暂停应用程序的显示,但不释放资源。
applicationDidEnterBackground:释放可以重新生成的资源。
注:不要在此阶段消耗太多时间(5秒),否则会被系统kill掉。(如果有太多后台的事件要处理,可以放到消息队列)
applicationWillEnterForeground:恢复在applicationDidEnterBackground释放的资源。
applicationDidBecomeActive:恢复applicationWillResignActive中的操作
**************************************************************
atany原创,转载请注明博主与博文链接,3Q
/article/7601634.html
—— by atany
**************************************************************
今天主要研究了一下Application的生命周期,如下。
一、Application的几种状态。
1)Not running 未运行
未运行状态就是程序的初始状态,程序处于这种状态时有三种可能。
1、设备刚启动。
2、程序处于暂停状态,且在系统内存紧张时,程序被系统Kill掉。
3、程序因为错误而崩溃。
2)Inactive 不活动
一般是一种过渡的状态,或者应用在被中断(不能响应消息)时也会进入此种状态:
1、应用程序在两个其他状态之间转化会在短时间内处于此状态。
2、系统提示的打断(短信、电话、锁屏)会使应用进入此状态:
不处理短信和电话会使应用一直处在不活动状态,而锁屏后在小段时间内会进入后台。
3)Active 活动
程序在前台运行的正常状态,能够接收到事件,最普通的状态。
4)Background 后台
程序在后台运行的状态,但是大多数都不会太久,会在时间到了之后转化为暂停状态。但是也有可能通过一些方式使得程序长时间停留在后台。
按下Home键之后,所有程序都会进入后台状态。
5)Suspended 暂停(挂起)
程序在暂停时不能执行代码、但是不会被释放内存。但是当系统内存不足的情况下,暂停的程序有可能会被释放。
如图所示:
1、活动与不活动状态之间转化:应用被系统中断的情况,用户没有转向中断程序,而返回原应用。
2、活动->不活动->后台->不活动->活动:应用被系统中断,用户转向处理,此时应用进入后台,在用户处理完成任务之后再次启动应用。
3、暂停到未运行:应用因系统内存紧张被杀死。
二、 应用程序的生命周期
1)主要声明周期
在iOS中,主要是一下几个委托回调来作用着应用的生命周期。
application:didFinishLaunchingWithOptions
applicationWillResignActive
applicationDidEnterBackground
applicationWillEnterForeground
applicationDidBecomeActive
applicationWillTerminate
我们对此进行测试:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { NSLog(@"%@",NSStringFromSelector(_cmd)); return YES; } - (void)applicationWillResignActive:(UIApplication *)application { NSLog(@"%@",NSStringFromSelector(_cmd)); } - (void)applicationDidEnterBackground:(UIApplication *)application { NSLog(@"%@",NSStringFromSelector(_cmd)); } - (void)applicationWillEnterForeground:(UIApplication *)application { NSLog(@"%@",NSStringFromSelector(_cmd)); } - (void)applicationDidBecomeActive:(UIApplication *)application { NSLog(@"%@",NSStringFromSelector(_cmd)); } - (void)applicationWillTerminate:(UIApplication *)application { NSLog(@"%@",NSStringFromSelector(_cmd)); }
注:NSStringFromSelector(_cmd)的作用是返回当前方法名。
让我们看看,在一下几种情况下,这几个委托方法的执行顺序。
1、启动程序:
application:didFinishLaunchingWithOptions:
applicationDidBecomeActive:
2、按下Home键:程序进入后台,很快会进入暂停状态,但是暂停状态没有可以回调的函数。
applicationWillResignActive:
applicationDidEnterBackground:
3、回到程序:
applicationWillEnterForeground:
applicationDidBecomeActive:
4、短信打断:此时程序进入了不活动状态,而不是后台。
applicationWillResignActive:
4-1如果进入编辑短信:现在才进入后台。
applicationDidEnterBackground:
4-2退出短信
[b] applicationDidBecomeActive
[/b]
5、双击Home键,强行关闭程序:
但没有任何Log信息,说明程序从暂停变为未运行状态时,没有调用applicationWillTerminate方法!
那么什么时候applicationWillTerminate会被调用呢?答案是从后台变为未运行状态时,因为此时程序有时间反应。
三、每个生命周期的职能
那么每个回调中应该执行什么操作呢?
application:didFinishLaunchingWithOptions:程序初始化。
applicationWillResignActive:暂停应用程序的显示,但不释放资源。
applicationDidEnterBackground:释放可以重新生成的资源。
注:不要在此阶段消耗太多时间(5秒),否则会被系统kill掉。(如果有太多后台的事件要处理,可以放到消息队列)
applicationWillEnterForeground:恢复在applicationDidEnterBackground释放的资源。
applicationDidBecomeActive:恢复applicationWillResignActive中的操作
**************************************************************
atany原创,转载请注明博主与博文链接,3Q
/article/7601634.html
—— by atany
**************************************************************
相关文章推荐
- IOS视图控制器导航及生命周期研究Demo
- ios application生命周期
- Authorization and Profile Application Block 1.0研究总结
- IOS应用程序生命周期-UIApplication的生命周期
- iOS开发小记:关于环信Demo3.0的使用总结以及昵称和头像问题的研究与解决
- iOS Application Life Cycle 应用程序生命周期
- ios程序入口main及UIApplicationMain的研究
- iOS UIApplication的代理方法精华总结
- iOS 每日一记 之—— application的生命周期
- ios客户端发现_华为爱奇艺手机活动开发总结
- Authorization and Profile Application Block 1.0研究总结
- 【IOS6.0 自学瞎折腾】(五)应用程序的启动过程和Application生命周期
- Authorization and Profile Application Block 1.0研究总结
- iOS之Application的生命周期
- Authorization and Profile Application Block 1.0研究总结
- Authorization and Profile Application Block 1.0研究总结
- Authorization and Profile Application Block 1.0研究总结
- iOS Application Life Cycle 应用程序生命周期
- iOS—application的生命周期
- iOS UIApplication的代理方法总结