Android提高篇之-WakeLock应用与问题排查

本系列不讲如何使用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=0
power2.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源码看,不要觉得装逼,像这里信息网上都是东转西转的,只有自己看了才能相信。


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值