【转】深刻浅出 iOS 之生命周期

[iOS]深刻浅出 iOS 之生命周期

深刻浅出 iOS 之生命周期  http://blog.csdn.net/kesalin/article/details/6691766ios

罗朝辉(http://blog.csdn.net/kesalin) 多线程

转载请注明出处 app

iOS应用程序的生命周期相比 Android 应用程序的生命周期来讲,没那么简明易懂,可是也并不复杂。iOS应用程序的生命周期又根据系统是否支持多线程分为两种:
不支持多线程的iOS4以前的系统以及支持多线程的iOS4及其以后的系统。

iOS4 以前系统,app的生命周期图以下所示:
感谢 oliver@drobnik.com 提供如错详细的图,并以cc许可发布。url

从图中咱们能够看出: step 1,点击 app icon 或者从应用程序url(好比在Safari地址栏中输入应用程序url)启动应用程序。spa


step 2,就会进入 UIApplicationDelegate 的
- (void)applicationDidFinishLaunching:(UIApplication *)application;
或 
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;

step 3, 若是是从 url 启动的则先进入 UIApplicationDelegate 的
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url;
而后再跳转到step 4;不然直接跳转到step 4;

step 4,进入 UIApplicationDelegate 的
- (void)applicationDidBecomeActive:(UIApplication *)application;

step 5,进入应用程序主循环,这时应用程序已是活动的了,用户能够与应用程序交互。

step 6,在 step 5 状态下,若是按住 home 键或者进行任务切换操做,而后跳转到 step 8;

step 7,在 step 5 状态下,应用程序被中断(如来电,来短信),进入 UIApplicationDelegate 的
- (void)applicationWillResignActive:(UIApplication *)application;
若是用户选择不处理继续留在当前应用程序,则回到 step 4;若是用户选择处理,则跳转到 step 8;

step 8,进入 UIApplicationDelegate 的
- (void)applicationWillTerminate:(UIApplication *)application;
当前应用程序关闭。

注:这里所说的进入,并不是真正的调用该消息,只是走流程。由于 UIApplicationDelegate 的方法都是@optional的,实现了则真正执行,没有实现则什么也不作。.net

 

iOS4 及其以后的系统,app的生命周期图以下所示:线程

感谢 oliver@drobnik.com 提供如错详细的图,并以cc许可发布。blog

从图中咱们能够看出,支持多线程以后,状况要复杂得多了。但整体仍是有规律可循的,多了一个后台模式。
在app被中断以后,先进入后台:
- (void)applicationDidEnterBackground:(UIApplication *)application;
在app被中断后继续时,要从后台模式切换到前台:
- (void)applicationWillEnterForeground:(UIApplication *)application;

注意:iOS3.2 下构建的 app 也会进入applicationDidEnterBackground:,而后立马就关闭掉了。而iOS4.x 下构建的 app,进入applicationDidEnterBackground:后,不会立马关闭掉,而是留在后台状态。在后台状态下,不管你是经过点击 app icon仍是任务切换回到前台,首先进入的是 applicationWillEnterForeground,而后才是 applicationDidBecomeActive。

当系统内存不足时,系统会强行关闭那些尚在内存中但处于后台状态的 app,以腾出足够的内存供使用。可是那些被强行关闭的程序不会调用任何UIApplicationDelegate的委托方法,只会获得一个KILL 信号。当咱们长按app icon,强行关闭app,也是一样的处理过程。

在iOS4及以后的系统中,在app运行过程当中接电话/查看短信,应用程序不会被关闭,它会进入后台模式。咱们能够双击 home 键查看全部当前运行着的应用程序。生命周期

相关文章
相关标签/搜索