我想要实现的是检测系统何时在后台运行时终止应用程序(未暂停)。根据{{3}},它可以通过消除过程来完成。其中一个步骤是确定用户没有强制退出应用程序。我假设这是通过检查applicationWillTerminate
是否被调用来完成的。但是,根据Apple的文档,这个方法也可以被系统调用,所以我不确定它是如何消除这个选项的。
适用于不支持后台执行或已关联的应用 对于iOS 3.x或更早版本,此方法始终在用户时调用 退出应用程序。对于支持后台执行的应用程序,此方法 通常不会在用户退出应用程序时调用,因为该应用程序 在这种情况下简单地移动到背景。 但是,这种方法可能会 在应用程序在后台运行的情况下调用 (未暂停)系统需要因某种原因终止它。
是否有可能检测到后台系统终止,如果是,我在这里缺少什么?
答案 0 :(得分:1)
App Programming Guide for iOS: The App Life Cycle说:
暂停的应用在终止时不会收到通知;系统终止进程并回收相应的内存。如果某个应用当前正在后台运行且未暂停,则系统会在终止之前调用其应用代理的
applicationWillTerminate:
。当设备重新启动时,系统不会调用此方法。除了终止您的应用程序的系统之外,用户还可以使用多任务UI显式终止您的应用程序。用户启动的终止与终止暂停的应用程序具有相同的效果。应用程序的进程被终止,并且没有通知应用程序。
以上与实证检验一致。
在那篇Reducing FOOMs in the Facebook iOS app文章中,他们提到了应用程序执行的强制退出情况"上次应用程序打开时收到终止呼叫":这仅适用于应用程序正在运行的情况并且用户强制退出它。但是,如果用户首先返回主屏幕(或以其他方式暂停应用程序),然后强制终止应用程序,则不会收到该终止。
最重要的是,如果应用程序在终止时暂停,我不相信你有任何可靠的方法可以知道它是因为内存压力还是因为用户强行退出而被抛弃。 FOOM / BOOM文章中考虑的强制退出场景显然仅适用于应用程序在强制退出时运行的情况。