一楼:
默认情况下,Android设备会在一段时间后使屏幕变暗,然后关闭屏幕显示,最后停止CPU,有时用户并不希望如此,因此Android提供了WakeLock类让用户实现自定义的电源管理,但是如果不合理使用这个功能,应用程序造成的电池电量消耗产生显著的影响,所以建议当用户观看屏幕但是很少与屏幕进行交互时(如看视频)使用,从而防止屏幕变暗。
二楼:
如果一开始就对Android手机的硬件架构有一定的了解,设计出的应用程序通常不会成为待机电池杀手,而要设计出正确的通信机制与通信协议也并不困难。但如果不去了解而盲目设计,可就没准了。
首先Android手机有两个处理器,一个叫Application Processor(AP),一个叫Baseband Processor(BP)。AP是ARM架构的处理器,用于运行Linux+Android系统;BP用于运行实时操作系统(RTOS),通讯协议栈运行于BP的RTOS之上。非通话时间,BP的能耗基本上在5mA左右,而AP只要处于非休眠状态,能耗至少在50mA以上,执行图形运算时会更高。另外LCD工作时功耗在100mA左右,WIFI也在100mA左右。一般手机待机时,AP、LCD、WIFI均进入休眠状态,这时Android中应用程序的代码也会停止执行。
Android为了确保应用程序中关键代码的正确执行,提供了Wake Lock的API,使得应用程序有权限通过代码阻止AP进入休眠状态。但如果不领会Android设计者的意图而滥用Wake Lock API,为了自身程序在后台的正常工作而长时间阻止AP进入休眠状态,就会成为待机电池杀手。比如前段时间的某应用,比如现在仍然干着这事的某应用。
首先,完全没必要担心AP休眠会导致收不到消息推送。通讯协议栈运行于BP,一旦收到数据包,BP会将AP唤醒,唤醒的时间足够AP执行代码完成对收到的数据包的处理过程。其它的如Connectivity事件触发时AP同样会被唤醒。那么唯一的问题就是程序如何执行向服务器发送心跳包的逻辑。你显然不能靠AP来做心跳计时。Android提供的Alarm Manager就是来解决这个问题的。Alarm应该是BP计时(或其它某个带石英钟的芯片,不太确定,但绝对不是AP),触发时唤醒AP执行程序代码。那么Wake Lock API有啥用呢?比如心跳包从请求到应答,比如断线重连重新登陆这些关键逻辑的执行过程,就需要Wake Lock来保护。而一旦一个关键逻辑执行成功,就应该立即释放掉Wake Lock了。两次心跳请求间隔5到10分钟,基本不会怎么耗电。除非网络不稳定,频繁断线重连,那种情况办法不多。
【转自】http://www.dewen.org/q/2227?sort=active
分享到:
相关推荐
获取WakeLock实例后通过acquire()获取相应的锁,然后进行其他操作,最后使用release()释放(释放是必须的)。 Note: 1. 在使用以上函数的应用程序中,必须在其Manifest.xml文件中加入下面的权限: ...
WakeLock使用方法代码实例,需要的朋友可以参考一下
关于android节能,可以利用和提高的方面 适合小论文
wakelock插件使用。 对于此插件,这意味着基本API是使用定义的。 鸽子文件可在主软件包的中找到。 该API是在Dart中的定义的。 此外,Android和iOS实现可在主程序包中找到,而Web实现则在。 此仓库中的软件包如下: ...
Hold a wakelock that can be acquired in the AlarmReceiver and released in the AlarmAlert activity for Andriod.
浅析Wakelock机制与Android电源管理.pdf
本篇文章主要介绍了使用WakeLock使Android应用程序保持后台唤醒的相关知识。具有很好的参考价值。下面跟着小编一起来看下吧
各种锁的类型对CPU 、屏幕、键盘的影响:SCREEN_DIM_WAKE_LOCK:保持CPU 运转,允许保持屏幕显示但有可能是灰的,允许关闭键盘灯SCREEN
我们可以通过代理对应的 Service 实现,完成收集 Wakelock、Alarm、GPS 的申请堆栈、释放信息、手机充电状态等等。
:house: :sparkles:浏览器支持 react-screen-wake-lock使用原生的Screen Wake Lock API,并非所有浏览器都支持。 安装npm i react-screen-wake-lock# oryarn add react-screen-wake-lock用法 import { useWakeLock ...
step_counter_with_wakeLock 尝试让唤醒锁保持 step_counter 唤醒的测试,因为它实际上在屏幕关闭后立即关闭。 我已经修改了的代码,以检查 WakeLock 是否对我的三星 S4 有帮助:没有任何人可以帮忙吗?
屏幕唤醒锁定API 您可以在查看完整的文档。
这是Wake Lock API的包装。 安装 npm install @alxshelepenok/awaker 执照 麻省理工学院执照 版权所有(c)2021 Alexander Shelepenok 特此免费授予获得该软件和相关文档文件(“软件”)副本的任何人无限制使用...
一个基于Geolocation API,AmbientLightSensor API和WakeLock API的小巧,简洁的速度计渐进式Web应用程序。 为什么? 因为我的2005 Prius上的组合仪表处于故障状态,所以我需要一个测速仪,直到可以拆开并修理有...
React本机接近唤醒锁React本机接近唤醒锁(仅适用于Android)
唤醒锁资源管理初始提交自定义 Android 电源管理框架,以便在管理各种 Android 应用程序获取的唤醒锁时提供更多用户级别的控制。 这可以使高级用户能够更有效地管理 Android 手机上的电池使用情况