我怎么知道我受到影响了?
对于不熟悉此主题的人来说,这可能是第一个问题。使用Gingerbread(Android 2.3)及更高版本,您将获得一项服务来帮助您确定:电池统计信息。尽管制造商倾向于将其放置在不同的位置,但通常可以在“设置”→“关于手机”→“电池”或类似内容中找到它,并显示已用完大部分电池的应用程序列表。最重要的是一个小图。点击该按钮,它会带您进入类似于此屏幕:
Android 2.3上电池电量统计信息的屏幕截图
我从其中一台设备中选择了一张截图来说明问题。查看下方的两个蓝色条(“ Aktiv” =设备保持清醒(活动),“ Bildschirm an” =“屏幕打开”),“ Aktiv”上最右边的蓝色条表示WakeLock:尽管屏幕已关闭的事实。因此,通过此操作,我们可以确定我们有WakeLock-但我们无法确定是谁造成的。
如果您的设备不提供该屏幕(或底部的条形:我刚刚发现例如运行Android 4.0.3 的LG Optimus 4X切断了这些条形),则可以使用GSam Battery Monitor找到它们:
来自GSam Battery Monitor的类似信息-这里提到的“蓝色条”是黄色/橙色
是什么引起了WakeLock?
不幸的是,使用预装的应用程序(也许有些自定义ROM除外)无法回答此问题。但是有可用的工具可以。最知名的候选方法是BetterBatteryStats,并在其部分唤醒锁部分中向我们显示了原因:
来自BetterBatteryStats的屏幕截图
在第一个示例2中(从应用程序的playstore页面获取),导致大多数WakeLocks的事件是一个理想的事件:我们不希望在听音乐时停止播放。因此,第二个示例3(取自我的设备之一的真实案例)可能会更好:最上面的3个事件是由同一个应用程序引起的,该应用程序需要WakeLock才能保持IMAP推送服务处于活动状态。
对于BetterBatteryStats的替代方案,请查看UzumApps的答案中提到的Wakelock Detector应用程序-似乎更易于处理,尤其是对于非技术人员:
唤醒锁检测器-单击图像放大。(来源:Google Play)
该怎么办?
如果情况与上一节中的第二个示例一样清楚,则该动作非常明显-至少在我的情况下:当邮件到达时,我不需要立即得到通知;延迟30分钟绝对可以接受。因此,我进入了邮件应用程序,禁用了IMAP Push(另请参见:Push Email),而是切换到30分钟的轮询间隔。WakeLocks并没有完全消失,但明显下降了-电池寿命显着提高。
然后是问题本身提到的情况:行为不良的应用程序未释放其WakeLock。将开发人员与您的发现相面对,并寻求修复。如果他提供:问题已解决。如果没有:几乎总是有其他可用的应用程序。
如果是Android系统本身怎么办?
是的,有时候看起来像是:某些Android服务消耗了98%或更多的东西。哦,如果它是98%,在大多数情况下,该候选人是LocationManagerService。坏人在监视我们?不必要。在这种特殊情况下,列出的“坏蛋”甚至没有罪过-至少不是直接有罪。这是另一个应用程序过于频繁地请求当前位置。在Setera.org上有一篇很好的文章:精确定位Android LocationManagerService的电池消耗。给出一个摘要:它使用Android的dumpsys
功能(需要root!)来转储系统状态,并允许您调查为LocationManagerService建立的侦听器。仔细查看它们的配置,可以发现哪些位置在不断“锤击”位置信息(有些是永久性的,即不间断)。由于列出了应用程序的ID,并在转储中的另一个位置列出了ID,甚至连同应用程序的技术名称一样,您仍然可以识别它并采取适当的措施。
那不明飞行物呢?
不幸的是,有这样的情况:注册了WakeLock的应用程序-然后退出而没有释放它。剩下的是*未使用的F *** ing过时*-保持WakeLocks不使用。因此,无法简单地将应用程序置于前台并重新配置,或者使其释放WakeLocks。
我唯一知道的解决方案是重新启动-我想有一个更好的解决方案。当然,如果您知道有罪的应用程序,则与之相关的步骤与上述步骤相同:通知开发人员,获取修复程序或替换该应用程序。但是要摆脱目前的 WakeLock吗?也许其他人可以为重启提供更好的选择?
有推荐的进一步阅读资料吗?
当然。现在,我可能以后再添加:
/sys/power/wake_lock
,但是如果您使用PowerManager和PowerManager.WakeLock来以“正确”的方式来创建唤醒锁,则该服务都将保留真正的唤醒锁。并释放它,即使您的进程被杀死了……