计步器锁屏后依然工作的原理

Android关闭屏幕的同时禁止硬件进入休眠
Screen Off之后,CPU和各种外设(包括WIFI,蓝牙,加速度传感器等等)都停止工作。

WakeLock能够禁止Android硬件进入休眠。进程可以创建各种类型的WakeLock,只要系统中还存在WakeLock,那么系统就不会休眠。

以下是创建并使能Wake Lock的一般性代码:

PowerManager powerManager=(PowerManager)getSystemService(Context.POWER_SERVICE);
WakeLock wakeLock=powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,TAG);
wakeLock.acquire();
释放Wake Lock的代码为:
wakeLock.release();
而创建Wake Lock的代码:

WakeLock wakeLock=powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,TAG);

中,PARTIAL_WAKE_LOCK可以替换成其他的参数,以决定Wake Lock的类型。

wakelock的值和类型
意义
PARTIAL_WAKE_LOCK保持CPU运转,屏幕和键盘灯有可能是关闭的。
SCREEN_DIM_WAKE_LOCK保持CPU运转,允许保持屏幕显示但有可能是灰的,允许关闭键盘灯。
SCREEN_BRIGHT_WAKE_LOCK保持CPU运转,保持屏幕高亮显示,允许关闭键盘灯。
FULL_WAKE_LOCK保持CPU运转,保持屏幕高亮显示,键盘灯也保持亮度。
ACQUIRE_CAUSES_WAKEUP不会唤醒设备,强制屏幕马上高亮显示,键盘灯开启。有一个例外,如果有notification弹出的话,会唤醒设备。
ON_AFTER_RELEASEWake Lock被释放后,维持屏幕亮度一小段时间,减少Wake Lock循环时的闪烁情况。
如果申请了PARTIAL_WAKE_LOCK,那么即使按Power键,系统也不会进Sleep,如Music播放时。如果申请了其它的WakeLock,

按Power键,系统还是会进Sleep。但如果不领会Android设计者的意图而滥用Wake Lock API,为了自身程序在后台的正常工作而

长时间阻止AP进入休眠状态,就会成为待机电池杀手。
当然,要在AndroidManifest.xml中加权限:

<uses-permission android:name="android.permission.WAKE_LOCK"/>

在某些手机上,当屏幕关闭时,手机虽然还是在通过UDP发送数据,但是数据固定不变了,这说明传感器已经停
止更新数据。原因:由于Android的开放性,任何手机生产商都可以对系统裁剪、自定义。尤其是Android的驱动
程序,谷歌只定义了头文件,规定必须实现的函数,而具体实现完全有厂商决定。有些手机被设计成这样:当电
源键被按下时,驱动程序关闭传感器电源。因此,即使加了WAKELOCK也没用。毕竟,谷歌规定WAKELOCK只是“保
持CPU”运转,并没有规定WakeLock需要保持传感器等外设运转。
一种对部分手机有效的办法,即注册一个Intent.ACTION_SCREEN_OFF消息的事件监听器,并在
Intent.ACTION_SCREEN_OFF监听器中重新注册传感器事件监听器。于是,当屏幕关闭时,程序就会再次注册传感
器事件监听器。
流程:
(1)当屏幕关闭之时,安卓停掉所有传感器的电源;
(2)然后执行Intent.ACTION_SCREEN_OFF的回调函数;
(3)在回调函数中,重新注册传感器监听器。而传感器监听器的注册导致传感器电源又重新开启。

所以综上,正确的做法是注册一个锁屏的广播接收者,当锁屏事件发生时,wakeup cpu and register sensorListener




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值