WakeLock 窗口常亮
作者:互联网
虽然 Android 会不断关闭各种硬件来延长手机的待机时间,比如经过一段时间未做任何操作时,屏幕会逐渐变暗直至关闭,然后 CPU 进入低功耗的睡眠状态,系统这些机制都是为了节约更多的电量资源。
WakeLock
然而现实并非如此,由于应用需要满足一些特定的场景,比如一款社交类应用,即使手机处于待机状态,也需要把应用唤醒检查同步新的数据信息,或者播放器停留在看歌词页面。因此即使在这种睡眠状态下,应用为了达到这些目的和需求,它们会不断尝试唤醒手机。在Android 操作系统中,最常用的唤醒手机的方法是使用 PowerManager.WakeLock 来保持 CPU工作并防止屏幕自动变暗关闭。这使得手机可以保持在唤醒状态,继续执行相应的工作。PowerManager 负责对 Android 设备电源相关进行管理,WakeLock 也是一种锁机制,只要应用中有 WakeLock,通过相应参数去获取对应的锁,既可以达到对应的电源管理目的,也可以使系统无法进入休眠阶段。
PowerManager powerManager = (PowerManager) this.getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.ON_AFTER_RELEASE | PARTIAL_WAKE_LOCK, "Tag");
if (null != wakeLock) {
wakeLock.acquire(10 * 60 * 1000L /*10 minutes*/);
}
private void releaseWakeLock(PowerManager.WakeLock wakeLock) {
if (wakeLock != null) {
wakeLock.release();
wakeLock = null;
}
}
如上代码所示,首先需要获取 PowerManager 的实例 pm,然后通过 newWakeLock 方法获取 WakeLock 的相应锁,其中第一个参数是指定要获取哪种类型的锁,不同的锁对系统 CPU、屏幕和键盘有不同的管理策略,第二个参数是锁的自定义名称。
Android 系统中的 WakeLock 类型有以下几种,它们对 CPU、屏幕、键盘的影响有不同的策略。
- PARTIAL_WAKE_LOCK:保持 CPU 正常运转,屏幕和键盘灯有可能会关闭。
- SCREEN_DIM_WAKE_LOCK:保持 CPU 运转,允许保持屏幕显示但有可能变暗,允许关闭键盘灯。
- SCREEN_BRIGHT_WAKE_LOCK:保持 CPU 运转,允许保持屏幕高亮显示,允许关闭键盘灯。
- FULL_WAKE_LOCK:保持 CPU 运转,保持屏幕高亮显示,键盘灯也保持亮度。
- ACQUIRE_CAUSES_WAKEUP:强制使屏幕亮起,这种锁主要用于一些必须通知用户的操作。
- ON_AFTER_RELEASE:当锁被释放时,保持屏幕亮起一段时间。
使用 WakeLock 需要注册相应的权限:
<uses-permission android:name="android.permission.WAKE_LOCK"/>
拿到 WakeLock 后,可以保持完成需要完成的事,但完成后,或者离开这个场景后,需要及时释放 WakeLock,这点非常重要的,否则会带来不可预估的电量消耗。
WakeLock 是应用中为了正常完成相应工作最普遍的做法,但不恰当地使用 WakeLock会导致严重的耗电问题
还有其他两种设置常亮的方式如下:
在Window设置flag(推荐)
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
在界面布局xml中顶层添加属性
android:keepScreenOn="true"
标签:PowerManager,LOCK,常亮,wakeLock,窗口,屏幕,CPU,WakeLock 来源: https://blog.csdn.net/ldxlz224/article/details/101219374