其他分享
首页 > 其他分享> > WakeLock 窗口常亮

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