iOS-APP运行状态

586 阅读2分钟

「这是我参与11月更文挑战的第21天,活动详情查看:2021最后一次更文挑战

在开发项目过程中, 会有需要监听程序当前的运行状态来决定当前的逻辑该如何操作, 尤其是有一些连续性的操作的时候,比如: 播放视频 播放音频 录制音视频 等等.

那么就需要我们对程序的运行状态有一定的了解, 操作可以做出相对应的处理.

iOS系统下 程序的运行状态有5个类型分别是:

  • Not Runnin
    未运行

  • Inactive
    前台非活动状态, 不能接收事件

  • Active
    前台活动状态, 可以接收事件

  • Background
    后台状态, APP进入后台, 可以执行任务, 执行完毕 程序进入挂起状态

  • Suspended
    挂起状态, 在后台挂起, 无法执行任务, 如果内存不足,APP会被杀死

如何监听程序运行状态的变更呢? 其实苹果有对应的API来实现, 我们每个项目都在有用.
那就是 AppDelegate 中的代理回调, 那么就来说说 AppDelegate 中的各个代理对应的运行状态是什么.

  1. application:didFinishLaunchingWithOptions:

    这个回调是在程序启动的时候调用的, 也是整个程序除了main函数之后的第一个函数了.
    对应的 本地通知 UIApplicationDidFinishLaunchingNotification
    可以通过 通知接收的方式来监听到对应的状态

  2. applicationDidBecomeActive:

    这个回调是程序进入前台, 并且是激活状态的时候调用.
    这里可以做一些恢复原先的任务继续执行, 比如 恢复音视频的播放 开启音视频的录制
    对应的本地通知 UIApplicationDidBecomeActiveNotification

  3. applicationWillResignActive:

    这个回调是程序进入非活动状态的回调
    这里应该做一些保存性的任务, 比如 暂停音视频 停止音视频的录制 等
    对应的本地通知 UIApplicationWillResignActiveNotification

  4. applicationDidEnterBackground:

    这个回调是程序进入后台的时候回调
    这里做的任务和 applicationWillResignActive 是类似的. 对应本地的通知 UIApplicationDidEnterBackgroundNotification

  5. applicationWillEnterForeground:

    这个回调是程序进入前台,但是没有处于活动状态
    这里一般做的任务就是恢复一些用户的数据之类的 对应本地通知 UIApplicationWillEnterForegroundNotification

  6. applicationWillTerminate:

    这个回调还是比较重要的, 那就是程序被杀死的时候给一个回调用于处理一些紧急的数据 这里的任务一般是 保存用户数据和资源到本地 对应本地通知 UIApplicationWillTerminateNotification

通过上述的了解, 我们也清楚了 AppDelegate 中各个代理对应的处理逻辑,
那么我们在手指按下图标的时候, 程序运行状态的变化都是怎样的呢?

Not running ------> Inactive ------> Active