首页 > 解决方案 > applicationWillTerminate 与 applicationWillResignActive 与 applicationDidEnterBackground?它们究竟是什么时候触发的?

问题描述

我知道存在类似的问题,但我认为这个问题更为笼统,并没有回答我试图找出的具体细节。

我已经阅读了 Apple 文档,但我仍然对何时触发这些方法感到有些困惑。从 Apple 文档中,iOS 应用程序似乎可以进行以下状态转换:

  1. 应用程序在前台终止(例如双击主页按钮并向上滑动应用程序):applicationWillTerminate在这种情况下肯定会触发,实际上这是我不太困惑的唯一情况。

  2. 应用切换到后台同时还在后台运行(对于“支持后台执行的应用”引用苹果文档):applicationDidEnterBackground触发了吗?applicationWillResignActive是否触发?

  3. 后台运行的应用程序被终止:applicationWillTerminate可能(?)根据Apple文档触发......所以它有时可能会或可能不会被触发?

  4. App切换到后台并立即挂起:applicationDidEnterBackground并且applicationWillResignActive都被触发了?

  5. 后台运行的应用程序被暂停:applicationWillResignActive被触发?还是什么都没有触发?

  6. “不支持后台执行”的应用程序切换到后台:applicationWillTerminate根据Apple文档触发?但这究竟是在谈论什么?

  7. 应用程序在前台崩溃:我猜在这种情况下什么都不会触发?

  8. 后台运行的应用程序崩溃:在这种情况下也不会触发任何事情,对吧?

  9. 后台暂停应用程序被终止:我猜又没有触发任何东西?

我认为 Apple 文档在解释这些方法时要么有些模糊,要么完全令人困惑。有时他们谈论“支持后台执行的应用程序”与“不支持后台执行的应用程序”,有时他们谈论“在后台运行”与“暂停”,有时他们只是说诸如“用户退出应用程序,它开始转换到后台状态“或”来电或短信“,这是现实世界的用例,而不是技术概念。

所以任何人都可以用更一致的技术术语来帮助解释在特定情况下这些方法究竟是什么时候触发的?

编辑:不知道为什么这个问题被认为不是“重点”,因为我正在尝试使用这些应用程序委托方法,但是在进行了一些个人测试和阅读官方文档之后,我仍然不知道这些方法何时会被触发以及如何可靠地使用它们。

也许我可以通过从 PGDev 的答案中借用一些东西来详细说明,所以如果我理解正确,iOS 应用程序可以处于 5 种状态:

  1. 不运行
  2. 不活跃
  3. 积极的
  4. 暂停
  5. 背景

并且当app改变状态时,可能会触发一些委托方法,但是从Apple官方文档来看,在哪个状态转换过程中会触发哪些方法似乎很混乱。

例如,我不确定当应用程序从状态 5 到状态 4、当应用程序从状态 5 到状态 1 以及当应用程序从状态 4 到状态 1 时会触发什么或是否有任何方法。也从苹果官方文件似乎说,applicationWillTerminate如果“不支持后台执行的应用程序”切换到后台,就会触发,但是我无法applicationWillTerminate通过按下主页按钮来触发任何类型的应用程序。

就目前而言,我不确定我是否可以可靠地利用这些方法来做任何事情,这就是为什么我希望有人能更清楚地了解这些方法何时会被触发(而不是被触发),除了那些模糊的描述苹果官方文件。

标签: iosobjective-cswift

解决方案


以下是 App Lifecycle 方法如何工作的详细说明。

应用程序的生命周期中存在5 个状态

  1. 未运行— 应用程序未运行。

  2. 非活动- 在前台运行 + 不接收事件

    • 可以将 iOS 应用程序置于非活动状态,例如,当收到电话或短信时。(前台 + 未运行)
  3. Active——前台运行+接收事件

  4. 挂起——在后台运行 + 不执行代码

  5. 后台——后台运行+执行代码

接下来存在7 个委托方法,只要在应用程序的会话中更改上述状态,就会调用这些委托方法。

发射时间

  1. application:willFinishLaunchingWithOptions

    • 启动启动过程时调用的方法。
    • 这是在应用程序中执行任何代码的第一次机会。
    • 启动过程已经开始,但状态恢复尚未发生。
  2. didFinishLaunchingWithOptions

    • 当启动过程几乎完成并且应用程序几乎可以运行时调用的方法。最终初始化。

过渡到前台

  1. applicationDidBecomeActive
    • 应用程序已激活。

过渡到背景

  1. applicationDidEnterBackground
    • 此方法在 iOS 应用程序正在运行但不再在前台时调用

过渡到非活动状态:

  1. applicationWillResignActive

    • 从活动状态退出到另一个状态
    • 每次发生临时事件(例如电话呼叫)时,都会调用此方法
    • 当应用程序移动到后台时调用
  2. applicationWillEnterForeground

    • 即将从后台进入 -> 前台

终止

  1. applicationWillTerminate
    • 应用程序即将终止。
    • 强制退出 iOS 应用程序或关闭设备
    • 这是保存应用程序配置、设置和用户首选项的机会。

调用上述方法的顺序的一些流示例。

  • 启动应用程序 — 1、2、3 — willLaunch+ didLaunch+didBecomeActive
  • 按主页 — 5、4 — resignActive+didEnterBackground
  • 从后台打开应用程序 — 6、3 — willEnterForeground+didBecomeActive
  • 打开任务管理器 — 5 —resignActive
  • 应用程序在前台时来电 — 5 —resignActive

您可以使用上述示例测试 lfecycle 方法的执行。


推荐阅读