进入后台:applicationDidEnterBackground
转入前台:applicationWillEnterForeground
详细内容如下。
iOS的应用程序的生命周期,还有程序是运行在前台还是后台,应用程序各个状态的变换,这些对于开发者来说都是很重要的。 iOS系统的资源是有限的,应用程序在前台和在后台的状态是不一样的。在后台时,程序会受到系统的很多限制,这样可以提高电池的使用和用户体验。
//开发app,我们要遵循apple公司的一些指导原则,原则如下:
1、应用程序的状态
状态如下:
Not running 未运行 程序没启动
Inactive 未激活 程序在前台运行,但不能接受事件的处理.当应用要从一个状态切换到另一个不同状态时,中途 过度会短暂停留在此状态.
Active 激活 程序在前台运行而且接收到了事件。这是应用在前台运行时所处的正常状态.
Backgroud 后台 程序在后台而且还在执行代码.大多数将要进入 Suspended 状态的应用,会先短暂进入此状态.如果应用请求更多额外的执行时间,该应用会在此状态保持更长一段时间.另外,如果一个应用要求启动时直接进入后台运行,这样的应用会直接从 NotRunning 状态进入 Background 状态,中途不会经过 Inactive 状态.比如,没有界面的应用(当然并不特指没有界面的应用),总之,如果应用直接进入 Background 状态,该应用界面不会被显示出来.
Suspended 挂起 应用处在后台,并且没有执行任何代码.系统会自动将应用转入该状态,并且不会发出任何通知.当处在该状态时,应用依然驻留内存,但不执行任何程序代码.当系统发生低内存警告时,系统会将出于 Suspended 状态的应用彻底移出内存,从而为前台应用释放更多的内存.
下图是程序状态变化图:
- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions // 告诉代理进程启动但还没进入状态保存. 应用程序将要启动时自动调用该方法,该方法是应用程序启动时第一次执行自定义代码的机会.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions // 告诉代理启动基本完成程序准备开始运行. 应用程序启动时自动调用该方法,开发者可以在该方法中执行初始化相关的代码.
- (void)applicationDidBecomeActive:(UIApplication *)application //应用程序入活动状态执行. 应用在转入前台,并进入活动状态时回调该方法(当应用从启动到进入前台,或从后台转入前台都会调用该方法),可重写该方法执行最后的准备工作.
- (void)applicationWillResignActive:(UIApplication *)application // 当应用程序将要入非活动状态执行(应用正要从前台运行状态离开时将会调用该方法),在此期间,应用程序不接收消息或事件,比如来电话了
- (void)applicationDidEnterBackground:(UIApplication *)application // 用程序正出于 Background 状态,且随时可能进入Suspended 状态时将会调用该方法. 所以要设置后台继续运行,则在这个函数里面设置即可
- (void)applicationWillEnterForeground:(UIApplication *)application//当程序从后台将要重新回到前台,但暂时还没有到达 Active 状态时将会调用该方法. 这个刚好跟上面的那个方法相反。
- (void)applicationWillTerminate:(UIApplication *)application//该应用程序即将被终止时调用该方法,如果应用当前处在 Suspended 状态,此方法将不会被调用..通常是用来保存数据和一些退出前的清理工作。这个需要要设置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