图解ios程序生命周期

图解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应用程序生命周期(前后台切换,应用的各种状态)详解

2. 深度解析iOS应用程序的生命周期

3. iOS 7 的新后台多任务(multitasking)机制是如何工作的

  

posted @ 2016-02-18 00:46  BigFengFeng  阅读(1129)  评论(2编辑  收藏  举报