图解ios程序生命周期
应用程序启动后状态有Active、Inactive、Background、Suspended、Not running这5种状态,几种状态的转换见下图:
在AppDelegate中实现app状态变化时的回调函数,在 app状态发生变化时,系统会执行相应回调:
- (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
当程序载入后执行
1.程序启动时:
如图所示,当App启动时,首先由not running状态切换到inactive状态,此时调用application:didFinishLaunchingWithOptions:方法;然后由inactive状态切换到active状态,此时调用applicationDidBecomeActive:方法。
2.程序进入后台:
进入后台后,如果没有要求此app在后台运行(可以后台运行的几种情况在第一张图上有说明),那么程序的状态(比如什么时候suspend什么时候not running)完全有系统控制.
当切换到另一个App时,由状态active切换到inactive,此时调用applicationWillResignActive:方法;然后从inactive状态切换到running状态,此时调用applicationDidEnterBackground:方法。
3.程序返回前台:
而当切换回本来的App时,由running状态切换到inactive状态,此时调用applicationWillEnterForeground:方法,然后由inactive状态切换到active状态,调用applicationDidBecomeActive:方法。
4.中断:
当App发生中断时(来电话或拉出上面工具栏),由active状态切换到inactive状态,此时调用applicationWillResignActive:方法。
5.锁屏:
当手机锁屏时,由状态active切换到inactive,此时调用applicationWillResignActive:;然后再由inactive状态切换到running状态,此时调用applicationDidEnterBackground:方法。
6.程序终止:
程序只要符合以下情况之一,只要进入后台或挂起状态就会终止:
(1)iOS4.0以前的系统,app是基于iOS4.0之前系统开发的,设备不支持多任务。
(2)在Info.plist文件中,程序包含了 UIApplicationExitsOnSuspend 键。
(3)系统资源不足时系统调度终止app。
app如果终止了 ,系统会调用app的代理的方法 applicationWillTerminate,这样可以让你可以做一些清理工作。你可以保存一些数据或app的状态。这个方法也有5秒钟的限制。超时后方法会返回程序从内存中清除。
注意:用户可以手工关闭应用程序。
参考:
1. iOS应用程序生命周期(前后台切换,应用的各种状态)详解
3. iOS 7 的新后台多任务(multitasking)机制是如何工作的