方法 | 本地通知 | 说明 |
application:didFinishLaunchingWithOptions: | UIApplicationDidFinishLaunchingNotification | 应用启动并进行初始化时会调用该方法并发出通知。这个阶段会实例化根视图控制器 |
applicationDidBecomeActive: | UIApplicationDidBecomeActiveNotification | 应用进入前台并处于活动状态时调用该方法并发出通知。这个阶段可以恢复UI状态(例如游戏状态) |
applicationWillResignActive: | UIApplicationWillResignActiveNotification | 应用从活动态进入非活动态时调用该方法并发出通知。这个阶段可以保存UI的状态(例如游戏状态) |
applicationDidEnterBackground: | UIApplicationDidEnterBackgroundNotification | 应用进入后台时调用该方法并发出通知,这个阶段可以保存用户数据,释放一些资源(一些可重新加载的图片等资源) |
applicationWillEnterForeground: | UIApplicationWillEnterForegroundNotification | 应用进入前台,但是还没有处于活动状态时调用该方法并发出通知。这个阶段可以恢复用户数据 |
applicationWillTerminate: | UIApplicationTerminateNotification | 应用被终止时调用该方法并发出通知。这个阶段释放一些资源,也可以保存用户数据 |
当产生中断时,App应该在applicationWillResignActive:
方法中:
- 停止timer 和其他周期性的任务
- 停止任何正在运行的请求
- 暂停视频的播放
- 如果是游戏那就暂停它
- 减少OpenGL ES的帧率 挂起任何分发的队列和不重要的操作队列(你可以继续处理网络请求或其他时间敏感的后台任务)。 当程序回到active状态 , applicationDidBecomeActive: 方法应该上面提到的任务重新开始,比如重新开始timer, 继续分发队列,提高OpenGL ES的帧率。不过游戏要回到暂停状态,不能自动开始。
当App进入后台时,应当:
- 保存用户数据或状态信息,所有没写到磁盘的文件或信息,在进入后台时,最后都写到磁盘去,因为程序可能在后台被杀死,
- 释放尽可能释放的内存
应用进入后台后如果没有设置在后台运行的话,5s后将会挂起,挂起的App仍将在内存中,
但当系统内存较低时,将会终止一些挂起的程序来回收内存。那些内存最大的程序首先被终止。
因此当App进入后台后应尽可能的释放内存
复制代码
非运行状态-应用启动场景
点击home键-应用退出场景
应用可以在后台运行或挂起的情况:
应用不可以在后台运行:
挂起重新运行的场景
应用进入后台后如果没有设置在后台运行的话,5s后将会挂起,挂起的App仍将在内存中,但当系统内存较低时,将会终止一些挂起的程序来回收内存。