【问题标题】:app delegate's applicationWillTerminate not called when user kills app or shuts down device当用户杀死应用程序或关闭设备时,未调用应用程序委托的 applicationWillTerminate
【发布时间】:2014-10-03 10:26:06
【问题描述】:

我需要知道我的应用何时被终止(我不是在谈论进入后台)。

很遗憾,applicationWillTerminate 方法从未被调用过。

我在 SO 上发现了一些关于应用程序进入后台的帖子,但是当它们被终止时我真的需要它。 (按两次 Home 键,然后向上滑动)

任何想法如何在应用程序终止时获得通知?

【问题讨论】:

    标签: ios


    【解决方案1】:

    当应用程序被终止时,您将不会收到任何通知来在您的应用程序中处理它。应用刚刚收到信号 9,内核会清理包括所有线程在内的进程。

    我开发 iOS 应用程序快两年了,我经常在 -applicationWillTerminate: 方法中设置一个断点,而调试器从未碰巧在那里中断。我认为该方法仅与不支持多任务的应用程序相关 - 自 iOS 5 以来,不支持多任务的应用程序非常罕见。您必须在 Info.plist 文件中明确禁用多任务,通常没有充分的理由这样做!

    【讨论】:

    • 该方法实际上有时会被调用。但如果应用程序收到信号 9,您的权利。
    • @NilsZiehn 是的,我认为如果系统由于内存不足而终止应用程序,或者由于在后台使用太多资源而终止应用程序,则会调用它。无论如何,你不能依赖它被调用,所以我认为它不再有用了。不幸的是。
    • 知道 iPhone 关机时会调用哪个信号吗?
    • 我假设信号 9。但你可以测试它。覆盖一些信号处理程序(很可能是 TERM 接缝),覆盖 -applicationWillTerminate:,并记录到文件中。确保在写入后冲洗或关闭。然后关闭设备。我认为该文件仍然是空的...您可以在“a”模式下打开文件并为此使用my MPLog library。它在每个日志行之后将日志刷新到磁盘,它还可以告诉您当前处于哪个线程中。
    • 我刚刚在调试器运行的情况下对其进行了测试,它看起来像它的 SIGKILL(至少 xcode 是这样告诉我的......)。这对我来说意味着没有饼干:(
    猜你喜欢
    • 2018-03-18
    • 2019-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多