为了延长电池的使用寿命,Android设备会在一段时间后使屏幕变暗,然后关闭屏幕显示,最后停止CPU。WakeLock是一个电源管理系统服务功能,应用程序可以使用它来控制设备的电源状态。

        WakeLock可以用来保持CPU运行,避免屏幕变暗和关闭,以及避免键盘背光灯熄灭。

                        注意:

                        创建和使用Wake Lock会对应用程序造成的电池电量消耗产生显著的影响。因此,最好只在

                       确实有必要时使用Wake Lock,并且使用它们的时间越少越好,只要有可 能就释放它们。

        屏幕Wake Lock通常用于在用户观看屏幕但是很少与屏幕进行交互期间(例如,播放视频)防止屏幕变暗。

        CPU Wake Lock用于防止设备进入休眠状态,直至执行了一个操作。当服务从意图接收器内启动时常常出现这种情况,因为意图接收器可能在设备休眠期间接收意图。值得注意的是,在这种情况下,系统将在广播接收器的整个onReceive处理程序中使用CPU Wake Lock。

                        注意:

                        如果在广播接收器的onReceive处理程序中启动一个服务或广播一个意图,那么有可能在服务

                       启动以前,所使用的Wake Lock就会被释放。为了确保服务能够执行,需要放置一个独立的Wake Lock。

实现步骤:

  1. PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);通过 Context.getSystemService().方法获取PowerManager实例。
  2. 然后通过PowerManager的newWakeLock((int flags, String tag)来生成WakeLock实例。int Flags指示要获取哪种WakeLock,不同的Lock对cpu 、屏幕、键盘灯有不同影响。
  3. 获取WakeLock实例后通过acquire()获取相应的锁,然后进行其他业务逻辑的操作,最后使用release()释放(释放是必须的)。

关于flags

各种锁的类型对CPU 、屏幕、键盘的影响:

PARTIAL_WAKE_LOCK:保持CPU 运转,屏幕和键盘灯有可能是关闭的。

SCREEN_DIM_WAKE_LOCK:保持CPU 运转,允许保持屏幕显示但有可能是灰的,允许关闭键盘灯

SCREEN_BRIGHT_WAKE_LOCK:保持CPU 运转,允许保持屏幕高亮显示,允许关闭键盘灯

FULL_WAKE_LOCK:保持CPU 运转,保持屏幕高亮显示,键盘灯也保持亮度

ACQUIRE_CAUSES_WAKEUP:Normal wake locks don't actually turn on the illumination. Instead, they cause the illumination to remain on once it turns on (e.g. from user activity). This flag will force the screen and/or keyboard to turn on immediately, when the WakeLock is acquired. A typical use would be for notifications which are important for the user to see immediately.

ON_AFTER_RELEASE:f this flag is set, the user activity timer will be reset when the WakeLock is released, causing the illumination to remain on a bit longer. This can be used to reduce flicker if you are cycling between wake lock conditions.

权限获取

要进行电源的操作需要在AndroidManifest.xml中声明该应用有设置电源管理的权限。

<uses-permission android:name="android.permission.WAKE_LOCK" />
你可能还需要
<uses-permission android:name="android.permission.DEVICE_POWER" />

另外WakeLock的设置是 Activiy 级别的,不是针对整个Application应用的。

可以在activity的onResume方法里面操作WakeLock,  在onPause方法里面释放。

例子:

public abstract class WakeLocker {private static PowerManager.WakeLock wakeLock;private static final String APP_TAG = "MyWakeLock";public static void acquire(Context ctx) {if (wakeLock != null)wakeLock.release();
/*        PowerManager pm = (PowerManager) ctx.getSystemService(Context.POWER_SERVICE);wakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK |PowerManager.ACQUIRE_CAUSES_WAKEUP |PowerManager.ON_AFTER_RELEASE|PowerManager.SCREEN_BRIGHT_WAKE_LOCK, APP_TAG);
*/PowerManager pm = (PowerManager) ctx.getSystemService(Context.POWER_SERVICE);wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, APP_TAG);wakeLock.acquire();}public static void release() {if (wakeLock != null) wakeLock.release(); wakeLock = null;}
}

转载于:https://www.cnblogs.com/krislight1105/p/3748330.html

Android 使用WakeLock相关推荐

  1. 关于电源锁:android之WakeLock机制浅析

    http://blog.sina.com.cn/s/blog_4ad7c2540101n2k2.html 项目中数据传输时因为手机休眠而罢工了,这里简单了解了一下电源锁. android之WakeLo ...

  2. Android查看wakeLock调用情况

    Android wakelock分为两层Linux层和应用层1. 查看linux 的waklock# cat /sys/power/wake_lock PowerManagerService.Disp ...

  3. 2022-06-30 Android app WakeLock息屏状态下唤醒屏幕并且解锁demo

    一.解锁 //屏锁管理器 KeyguardManager km= (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE ...

  4. Android的WakeLock机制

    WakeLock原理和手机耗电: 手机功耗本质是硬件工作的消耗,手机主要功耗硬件如下:CPU GPU  soc Vedio 和外设.内存本身是不耗电的,只是作为程序的临时住所:           W ...

  5. android系统锁屏锁怎么解决方法,Android 屏幕锁 - WakeLock

    Android 屏幕锁 - WakeLock Android,powermanager,wakelock,屏幕, PowerManager android.os.PowerManager PowerM ...

  6. Android WakeLock详解

    目录 目录 前言 WakeLock使用 WakeLock levelAndFlags和使用场景 参考场景 WakeLock源码分析 结束语 前言 不知道大家是否也想过,当你手机灭屏的时候,为什么一条微 ...

  7. 从Android应用层及Framework层的角度分析WakeLock锁机制

      从Android应用层及Framework层的角度分析WakeLock锁机制 本篇博客编写思路总结和关键点说明: 为了更加方便的读者阅读博客,通过导读思维图的形式将本博客的关键点列举出来,从而方便 ...

  8. Android性能优化 笔记

    说明 这篇文章是将很久以来看过的文章,包括自己写的一些测试代码的总结.属于笔记的性质,没有面面俱到,一些自己相对熟悉的点可能会略过. 最开始看到的性能优化的文章,就是胡凯的优化典范系列,后来又陆续看过 ...

  9. Android app后台运行休眠仍然可以运行的方法(确保一直运行)

    在播放器app中由于需要用后台service 来播放音乐,所以一旦进入休眠状态时,就有可能被杀掉进程 所以需要让service 一直运行不被杀掉进程 在android 中WakeLock的相关 API ...

最新文章

  1. 网管网络布线之常用兵器谱
  2. 【bzoj5100】[POI2018]Plan metra 构造
  3. 【Java中级】(三)IO
  4. scanf与gets的区分
  5. Fiddler 抓包https配置 提示creation of the root certificate was not successful 证书安装不成功
  6. ueditor单图上传iframe跨域_UEditor单图上传(simpleupload)跨域问题解决方案
  7. 解决HbuiderX将uni-app开发的项目运行到小程序编译后文件vendor.js太大的问题
  8. 3.2)深度学习笔记:机器学习策略(2)
  9. 做CV和做NLP,是否都有光明的未来?
  10. Kerberos认证过程学习理解
  11. html中间一条虚线怎么画,【html5】HTML5中canvas怎样画虚线
  12. 亚马逊发力智能音箱商业模式,Alexa正式支持付费第三方应用
  13. python发送图片邮件exchangelib_python基于exchange函数发送邮件过程详解
  14. HDU-ACM-2041
  15. vue3安装WangEditor富文本编辑器v5版本
  16. AMR文件怎么存储的
  17. 统一告警平台设计方案
  18. 什么是RISC-V生态系统?
  19. 扩展欧几里得算法及贝祖定理的证明
  20. C55X McBSP

热门文章

  1. 基于增量更新的协同过滤
  2. yarn开启Label Scheduler
  3. kafka创建topic报错
  4. Hive复杂数据类型 struct
  5. nginx之lua_shared_dict命令
  6. java DataInput接口
  7. Hbase Cellutil源码
  8. 07-0.部署 worker 节点
  9. 【洛谷 P4291】 [HAOI2008]排名系统(Splay,Trie)
  10. 网络专业人员需要了解的物联网信息