本系列不讲如何使用wakelock,具体用法可以Google之。
wakelock申请忘记释放会造成手机耗电太快,严重影响用户体验,用户知道骂娘,厂商知道骂开发煞笔。废话说多了,进入正题。
我们现在onCreate里申请一个wakelock。别忘了需要在Manifest里申请权限
<uses-permission android:name="android.permission.WAKE_LOCK"/>
mPm = (PowerManager) getSystemService(Context.POWER_SERVICE); mWakeLock = mPm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "test_wake"); mWakeLock.acquire(); Log.v(TAG, "isHeld:" + mWakeLock.isHeld());然后在onDestroy里释放
mWakeLock.release();
adb shell dumpsys power > power.txt
adb shell dumpsys power > power2.txt
由于这些信息过于冗长,这里只贴出本例关心的部分。power.txt部分内容如下
Auto Power Off: mAutoPowerOffEventTime: 0 mAutoPowerOffTimeMillis: 0 mAutoPowerOffTimeoutSetting: 0 Wake Locks: size=0 Suspend Blockers: size=4 PowerManagerService: ref count=1 PowerManagerService.AutoPowerOff: ref count=0 PowerManagerService.Broadcasts: ref count=0 PowerManagerService.WirelessChargerDetector: ref count=0power2.txt
Wake Locks: size=2 FULL_WAKE_LOCK 'test_wake' (uid=10226, pid=6843, ws=null) (elapsedTime=8712) PARTIAL_WAKE_LOCK 'dnhttpNet' (uid=10114, pid=7050, ws=null) (elapsedTime=4273) Suspend Blockers: size=4 PowerManagerService: ref count=1 PowerManagerService.AutoPowerOff: ref count=0 PowerManagerService.Broadcasts: ref count=0 PowerManagerService.WirelessChargerDetector: ref count=0启动应用前log里显示wake locks: size=0,启动演示app后,我们看到wake locks的大小变为2了,其中有一个名为test_wake的lock即为我们创建的;有一个不用管,是另外一个service里的。可能每个人运行的都有所不同,遇到这种情况可以选择高版本的系统运行,越往后,Android的系统越完善,有更友好的调试信息。本人用的是S4 4.2.2版本。
我们退出应用后,再看下wake_lock,发现size又为0了。
Wake Locks: size=0
大家可别小瞧了这么蛋疼的示例,关键时候会把你搞残的。关于系统方面的东西还是实战前多准备,遇事才不会乱了阵脚,有方向的去排查log。关于各个dumpsys power里的各个字段什么意思,大家可以搜索powermanagerservice源码看,不要觉得装逼,像这里信息网上都是东转西转的,只有自己看了才能相信。