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"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值