华为EMUI 4.0+上的电池优化(唤醒锁)

Men*_*amm 7 gps android wakelock huawei

美好的一天,情况:

我正在开发用作运动追踪器/导航应用程序的Android应用程序 - 因此它需要永久连接到GPS以及永久唤醒设备.每秒录制一次.

目前的解决方案工作多年是因为wakelocks保持设备清醒.

Android 6.0+中的打盹模式使情况复杂化,但并非如此.

在华为设备上可能是不同类型的优化.

这是日志的一部分:

10-10 10:33:18.462 1014-384 D/PFW.HwPFWAppWakeLockPolicy: getUidWakeLock uid: 10097 wakelock >= 10 mins 10-10 10:33:18.543 1014-384 D/PFW.HwPFWAppWakeLockPolicy: force stop abnormal wakelock app uid: 10097 10-10 10:33:18.558 1014-384 I/ActivityManager: Force stopping menion.android.locus appid=10097 user=0: from pid 1014

大约经过 30多分钟,系统简单地决定应用程序使用太多wakelocks并完全终止它与所有服务,历史,简单kill.

有这种行为和任何建议的任何经验,如何这个简单的任务(屏幕关闭时永久记录GPS位置)更好?

正如我在开始时所写的,除了新华为之外的所有其他设备,这样的系统可以正常工作多年.

编辑:注意一个用户的评论(删除?),华为电池管理器中的"白​​名单"应用程序(标记为"受保护的应用程序")对此问题没有影响.

小智 10

有两个华为系统应用程序可能会杀死用户应用程序以节省电池:

  • SystemManager(com.huawei.systemmanager)会杀死屏幕关闭后仍在运行的所有应用程序,除非它们位于"受保护的应用程序"列表中.
  • PowerGenie(com.huawei.powergenie)可以杀死任何长时间保持唤醒锁定的应用程序.

听起来你的应用程序被PowerGenie杀死了.您可以通过利用PowerGenie的唤醒锁定标签的硬编码白名单来避免这种情况.例如,如果您的唤醒锁的标签是"LocationManagerService",它将被PowerGenie忽略,因为系统服务持有具有相同标签的唤醒锁,并且PowerGenie已将其列入白名单.