电池没电时会调用哪些 Android 方法?

Posted

技术标签:

【中文标题】电池没电时会调用哪些 Android 方法?【英文标题】:What Android methods are called when battery dies? 【发布时间】:2015-03-06 21:33:41 【问题描述】:

当我的 android 设备上的电池没电时,在设备的“关机”阶段会调用 Activity 和 Fragment 类(如果有)中的哪些方法?

另外,如果用户当前正在查看我的应用程序中的屏幕并且他们按住电源按钮并选择关闭,那么调用/未调用的事件是否与电池耗尽并自动关闭时一致?

暂停?

OnStop?

OnDestroy?

OnDetach?

奖金: 我是否有足够的时间将少量数据保存到网络服务器?

当设备的电池“完全”没电时,为了澄清“死机”,不再接受任何输入,并且屏幕上会弹出一个消息框/加载屏幕,说明“关机”。设备关闭后不久。

我只需要足够的时间在手机关机之前保存表单状态,如果手机没有关机,我有一个清理保存数据的策略,但我想尽可能接近手机关机(超过一分钟真的毫无意义)。

【问题讨论】:

没有。您需要为此使用广播接收器。 @Rohit5k2: none of them 来源是肯定的? (我们谈论的是受控断电,而不是突然移除电池) 【参考方案1】:

当电池电量达到 0.5% 时,所有东西都会调用 onDestroy

编辑:由于电池电量低/没电而导致关机过程中没有指定的时间,这取决于特定的手机电池而不是系统,因此您可能有足够的时间来保存数据到某些手机上的 Web 服务器,但不是其他手机上的 Web 服务器。在实验上,我只能在调用 onDestroy 之前已经写入的文件中写入短行,仅此而已。

【讨论】:

你有来源支持那个确认和那个数字吗? android.googlesource.com/platform/frameworks/base/+/… 代码显示MAX_BROADCAST_TIME = 10*1000,这是发送广播时等待的时间。 (但不应该在那里建立网络)。这也是给 ActivityManager 关闭的时间。 (参见 ShutdownThread)。 @Smithy BATTERY_LOW 确实是一个意图,应该在设备需要关闭之前发送。但这并不意味着设备将被关闭。 @Smithy: 那么BATTERY_LOW 并不能真正帮助您,因为我认为它发生在大约 4% 时,此时用户会收到通知并可能会为设备充电。 (除非你也检测到,并发送回滚)【参考方案2】:

您提到的方法是活动生命周期回调,当电池电量不足时不会调用它们。您需要为此使用广播接收器

看到这个How to detect when the Battery's low : Android?

【讨论】:

在设备真正断电之前我将收到的最后一个事件是什么?粗略地说,在手机自动关机之前我还有多少时间? 每次更改都会触发接收器。你可以在你认为合适的时候采取行动。

以上是关于电池没电时会调用哪些 Android 方法?的主要内容,如果未能解决你的问题,请参考以下文章

iOS:监控电池电量使用更多电池?应该自动保存吗?

如何查看蓝牙耳机的剩余电池电量

如何用万用表判断一个12V蓄电池是否没电

手机充满电时关闭手机的快捷方式

brookstone猫耳耳机充电一直是红灯

主板上的纽扣电池没电了,影响电脑开机吗?