phone 电池电量耗尽时,是否在应用程序中调用了 onDestroy?

Is onDestroy called in an application when the phone runs out of battery?

当phone没电时会调用onDestroy方法吗?我想它不会。不幸的是,我现在没有 phone 来测试它,否则我会自己检查一下。

我现在无法检查,但由于设备在实际失效之前经历了整个关机例程,您可以通过关闭它在模拟器中对其进行测试(F7 模拟电源按钮)

希望对您有所帮助!

现实中谁也说不准会发生什么。甚至还有疑问onDestroy()正常情况下会不会被调用

Activity 中应调用 的少数情况之一是使用 BACK 按钮或事件在 Activity 中显式导致调用 finish()。结果,理论上,Activity 将停止(调用 onStop())然后销毁(调用 onDestroy())。

当进程实际上是 'killed' 时,应用程序组件的干净 关闭 出现了歧义 - 这就是为什么 Task Killers 如此邪恶,因为它们基本上强行撕裂了进程无论 运行 状态如何,内存不足,通常会​​阻止任何清理操作的发生。

在绝对紧急情况下(例如当电池处于绝对最低限度时),系统将尽最大努力尽可能干净地关闭任何 运行 进程,但不保证它会这样做成功。

特别是,如果您有任何 'mission critical' 数据或状态需要保存,请在 Activity 暂停时执行(即,在 onPause() 或刚好至少在停止时(在 onStop())。

我个人很少使用 onDestroy(),原因我已经在上面概述了——一般来说,我致力于创建 -> 开始 -> 恢复 -> 暂停 -> 停止 - 重启生命周期方法.

最后,您必须记住您的应用程序可能有许多不同的组件(活动、服务以及显式或隐式应用程序)- 在电池电量不足的情况下关机,这些组件中的每一个都可能有不同的处理方式.但是,总而言之,如果进程 'ripped' 占用内存并被强行停止,则无法保证在为电池重新充电并重新启动应用程序后会发现什么,除非您计划保存数据和/或状态。

不,它不会调用 onDestroy() 方法。 因为只有在 activity 被销毁或退出时才会调用它,但在您的情况下,整个应用程序都会从​​内存中删除。 更好的选择是跟踪电池电量,当它达到 0.5% 或 0.6% 运行 你想要在 onDestroy 运行 执行的命令。

这说起来很复杂,但在我看来,当设备意外关闭时,OS 会对所有内容调用 onDestroy()