「这是我参与11月更文挑战的第21天,活动详情查看:2021最后一次更文挑战」
在开发项目过程中, 会有需要监听程序当前的运行状态来决定当前的逻辑该如何操作, 尤其是有一些连续性的操作的时候,比如: 播放视频 播放音频 录制音视频 等等.
那么就需要我们对程序的运行状态有一定的了解, 操作可以做出相对应的处理.
iOS系统下 程序的运行状态有5个类型分别是:
-
Not Runnin
未运行 -
Inactive
前台非活动状态, 不能接收事件 -
Active
前台活动状态, 可以接收事件 -
Background
后台状态, APP进入后台, 可以执行任务, 执行完毕 程序进入挂起状态 -
Suspended
挂起状态, 在后台挂起, 无法执行任务, 如果内存不足,APP会被杀死
如何监听程序运行状态的变更呢? 其实苹果有对应的API来实现, 我们每个项目都在有用.
那就是 AppDelegate
中的代理回调, 那么就来说说 AppDelegate
中的各个代理对应的运行状态是什么.
-
application:didFinishLaunchingWithOptions:
这个回调是在程序启动的时候调用的, 也是整个程序除了main函数之后的第一个函数了.
对应的 本地通知UIApplicationDidFinishLaunchingNotification
可以通过 通知接收的方式来监听到对应的状态 -
applicationDidBecomeActive:
这个回调是程序进入前台, 并且是激活状态的时候调用.
这里可以做一些恢复原先的任务继续执行, 比如 恢复音视频的播放 开启音视频的录制
对应的本地通知UIApplicationDidBecomeActiveNotification
-
applicationWillResignActive:
这个回调是程序进入非活动状态的回调
这里应该做一些保存性的任务, 比如 暂停音视频 停止音视频的录制 等
对应的本地通知UIApplicationWillResignActiveNotification
-
applicationDidEnterBackground:
这个回调是程序进入后台的时候回调
这里做的任务和applicationWillResignActive
是类似的. 对应本地的通知UIApplicationDidEnterBackgroundNotification
-
applicationWillEnterForeground:
这个回调是程序进入前台,但是没有处于活动状态
这里一般做的任务就是恢复一些用户的数据之类的 对应本地通知UIApplicationWillEnterForegroundNotification
-
applicationWillTerminate:
这个回调还是比较重要的, 那就是程序被杀死的时候给一个回调用于处理一些紧急的数据 这里的任务一般是 保存用户数据和资源到本地 对应本地通知
UIApplicationWillTerminateNotification
通过上述的了解, 我们也清楚了 AppDelegate
中各个代理对应的处理逻辑,
那么我们在手指按下图标的时候, 程序运行状态的变化都是怎样的呢?
Not running ------> Inactive ------> Active