【问题标题】:How to know whether app is terminated by user or iOS (after 10min background)如何知道应用程序是被用户还是 iOS 终止(后台 10 分钟后)
【发布时间】:2011-11-12 16:36:08
【问题描述】:

重启应用时如何知道应用是被用户终止还是被iOS终止>

'By user' 的意思是“通过双击主页按钮并按 - 按钮”。被用户杀死

'By iOS'的意思是“app进入后台运行状态,iOS在10分钟后终止app”

【问题讨论】:

  • 为什么 iOS 会在后台运行 10 分钟后终止您的应用?
  • 我想知道用户是否杀死了应用程序(通过点击红色'-'按钮)

标签: iphone ios background termination


【解决方案1】:

如果您的应用处于挂起状态,则无论是谁杀死了应用 iOS 或用户,applicationWillTerminate 都不会被调用。

您的applicationWillTerminate 只会在您的应用程序处于后台并且它被杀死(由 iOS 或用户)时调用,术语“后台”意味着它在后台运行而不是处于挂起状态。

阅读this reference

applicationWillTerminate:让您知道您的应用程序正在被终止。如果您的应用暂停,则不会调用此方法。

这是各种状态的表格

后台 - 应用程序在后台并执行代码。大多数应用程序在被暂停的过程中会短暂进入此状态。但是,请求额外执行时间的应用程序可能会在此状态下保持一段时间。此外,直接在后台启动的应用程序会进入此状态而不是非活动状态。有关如何在后台执行代码的信息,请参阅后台执行。

【讨论】:

    【解决方案2】:

    如果系统资源不足,iOS 可能会终止您的应用程序 - 如果发生这种情况,您将看到 applicationWillTerminate

    过去,如果用户杀死了应用程序(任务管理器,通过按钮双击然后点击红色的“-”)它是一个 SIGKILL 并且 applicationWillTerminate 不会被调用。 2013 年年中的一份报告表明这种情况发生了变化,现在调用了 applicationWillTerminate

    您可以使用 NSUserDefaults 在 applicationWillTerminate 中写入一些状态位,以注意该函数已被调用,并且可能是系统终止而不是用户终止。

    【讨论】:

    • 关于:“如果用户杀死应用程序(任务管理器,通过按钮双击然后点击红色'-')它是一个 SIGKILL 并且不会调用 applicationWillTerminate。”请注意,这种行为可能在某些时候发生了变化。我团队的另一位开发人员刚刚对此进行了测试,并报告说在这种情况下调用了applicationWillTerminate
    • 刚刚用调试器测试了这个:applicationWillTerminate 被调用,但不是没有调试器(使用 Xcode 控制台日志运行 iOS 7.1 的 iPhone5)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-08
    • 1970-01-01
    • 2011-05-02
    • 1970-01-01
    相关资源
    最近更新 更多