Closed. This question needs to be more focused。它当前不接受答案。












想改善这个问题吗?更新问题,使其仅关注editing this post一个问题。

3个月前关闭。



Improve this question




我知道存在类似的问题,但我认为该问题笼统得多,无法回答我要查找的具体细节。
我已经阅读了Apple文档,但是确切地触发这些方法时,我仍然有些困惑。从Apple文档来看,iOS应用程序可能存在以下状态转换:
  • 应用程序终止于前台(例如,双击“主页”按钮并向上滑动该应用程序):可以确定在这种情况下触发了applicationWillTerminate,实际上,这是我不太困惑的唯一情况。
  • 应用程序仍在后台运行时切换到后台(对于“支持后台执行的应用程序”引用Apple文档):applicationDidEnterBackground是否被触发? applicationWillResignActive是否被触发?
  • 后台运行的应用程序被终止:applicationWillTerminate可能根据Apple文档而被触发...,因此它有时可能会或可能不会被触发吗?
  • 应用程序切换到后台并立即挂起:applicationDidEnterBackgroundapplicationWillResignActive都被触发了吗?
  • 后台运行的应用程序被暂停:触发applicationWillResignActive?还是什么都没有触发?
  • “不支持后台执行”的应用程序切换到后台:applicationWillTerminate根据Apple文档触发了吗?但是,这实际上是在说什么呢?
  • 应用程序在前台崩溃:在这种情况下,我猜没有触发任何事情吗?
  • 后台运行的App崩溃:在这种情况下也没有触发任何东西,对吗?
  • 后台暂停的应用程序终止:我猜还是没有触发任何事情吗?

  • 我认为Apple文件在解释这些方法时有些含糊不清或令人困惑。有时他们谈论“支持后台执行的应用程序”与“不支持后台执行的应用程序”,有时他们谈论的是“在后台运行”与“暂停”,有时他们只说“用户退出应用程序,它将开始过渡到后台状态”或“来电或短信”,这是实际情况,而不是技术概念。
    因此,任何人都可以帮助以更一致的技术术语来解释在特定情况下何时确切触发这些方法?
    编辑:不确定为什么这个问题不被认为是“关注的”,因为我试图利用那些应用程序委托方法,但是经过一些个人测试和阅读正式文档之后,当这些方法将要使用时,我仍然茫然无措被触发,我如何可靠地使用它们。
    也许我可以通过从PGDev的答案中借用一些东西来进行详细说明,因此,如果我理解正确的话,iOS应用程序可以处于5种状态:
  • 未运行
  • 无效
  • Activity 的
  • 暂停
  • 背景

  • 当应用程序更改状态时,可能会触发某些委托方法,但与Apple的官方文档相去甚远,在哪种状态转换期间将触发哪些方法似乎非常令人困惑。
    例如,我不确定当应用程序从状态5进入状态4,应用程序从状态5进入状态1以及应用程序从状态4进入状态1时将触发什么方法或是否触发任何方法。 Apple官方文件似乎说,如果将“不支持后台执行的应用程序”切换到后台,则会触发applicationWillTerminate,但是我仅通过按“主页”按钮就无法获得任何类型的应用程序来触发applicationWillTerminate
    从目前的情况来看,我不确定我是否可以可靠地利用这些方法来做任何事情,这就是为什么我希望有人可以清楚地说明何时确切触发(而不触发)这些方法,以及苹果官方文件。

    最佳答案

    这是有关App Lifecycle方法如何工作的详细说明。
    应用程序的生命周期中存在 5个状态

  • 未运行-应用程序未运行。
  • 不 Activity -在前台运行+不接收事件
  • 可以将iOS应用设置为非 Activity 状态,例如,在收到 call 或SMS消息时。(前景+未运行)

  • Activity -在前台运行+接收事件
  • Suspend —在后台运行+不执行代码
  • Background —在后台运行并执行代码

  • 接下来,存在 7个委托方法,只要在应用程序的 session 中更改以上状态,就会调用这些方法。
    启动时间
  • application:willFinishLaunchingWithOptions
  • 启动启动过程时调用的方法。
  • 这是在应用程序内执行任何代码的第一个机会。
  • 启动过程已经开始,但尚未发生状态恢复。

  • didFinishLaunchingWithOptions
  • 启动过程即将完成且应用即将准备就绪时调用的方法。最终初始化


  • 过渡到前景
  • applicationDidBecomeActive
  • 应用程序已激活。


  • 过渡到后台
  • applicationDidEnterBackground
  • 当运行iOS应用但不再在前台
  • 时调用此方法


    过渡到无效状态:
  • applicationWillResignActive
  • 从 Activity 状态退出到另一状态
  • 每次发生临时事件(例如电话)时,此方法都称为
  • 当应用移至后台时调用


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


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


  • 一些流示例的顺序将调用上述方法。
  • 启动应用程序—,1、2、3 — willLaunch + didLaunch + didBecomeActive
  • 按下主页— 5、4 — resignActive + didEnterBackground
  • 从后台打开应用程序— 6,3 — willEnterForeground + didBecomeActive
  • 打开任务管理器— 5 — resignActive
  • 应用程序在前台时出现电话— 5 — resignActive

  • 您可以使用上面的示例测试lfecycle方法的执行情况。

    关于ios - applicationWillTerminate与applicationWillResignActive与applicationDidEnterBackground?它们何时准确触发? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/62675187/

    10-09 18:35
    查看更多