Android 屏幕锁 - WakeLock

Android,powermanager,wakelock,屏幕,

PowerManager

android.os.PowerManager

PowerManager 是用来管理设备的电源状态的类。下面是官方文档

This class gives you control of the power state of the device.

Device battery life will be significantly affected by the use of this API. Do not acquire WakeLocks unless you really need them, use the minimum levels possible, and be sure to release it as soon as you can.

You can obtain an instance of this class by calling Context.getSystemService().

The primary API you'll use is newWakeLock(). This will create a PowerManager.WakeLock object. You can then use methods on this object to control the power state of the device.

Wake Lock 是一种锁的机制, 只要有人拿着这个锁,系统就无法进入休眠,可以被用户态程序和内核获得. 这个锁可以是有超时的或者是没有超时的,超时的锁会在时间过去以后自动解锁. 如果没有锁了或者超时了, 内核就会启动休眠的那套机制来进入休眠.

PowerManager.WakeLock 有加锁和解锁两种状态,加锁的方式有两种,一种是永久的锁住,这样的锁除非显式的放开,是不会解锁的,所以这种锁用起来要非常的小心。第二种锁是超时锁,这种锁会在锁住后一段时间解锁。在创建了 PowerManager.WakeLock 后,有两种机制,第一种是不计数锁机制,另一种是计数锁机制。可以通过PowerManager.WakeLock.setReferenceCounted(boolean value) 来指定,一般默认为计数机制。这两种机制的区别在于,前者无论 acquire() 了多少次,只要通过一次 release()即可解锁。而后者正真解锁是在( --count == 0 )的时候,同样当 (count == 0) 的时候才会去申请加锁,其他情况 isHeld 状态是不会改变的。所以 PowerManager.WakeLock 的计数机制并不是正真意义上的对每次请求进行申请/释放每一把锁,它只是对同一把锁被申请/释放的次数进行了统计再正真意义上的去操作。

获取锁的方式

public PowerManager.WakeLock newWakeLock (int flags, String tag)

Flags

Android 总共定义了四个 Flags , 你只需要其中的一个,现实上现在只有 PARTIAL_WAKE_LOCK 没有过期,其他的可以使用 FLAG_KEEP_SCREEN_ON 代替。

PARTIAL_WAKE_LOCK : CPU 运转,屏幕和键盘灯关闭

SCREEN_DIM_WAKE_LOCK : 已过期(API 17) CPU 运转,屏幕亮但是比较暗,键盘灯关闭

SCREEN_BRIGHT_WAKE_LOCK : 已过期(API 13)CPU 运转,屏幕高亮,键盘灯关闭

FULL_WAKE_LOCK :已过期(API 17) 完全唤醒,CPU 运转,屏幕高亮,键盘灯亮

如果使用的是 PARTIAL_WAKE_LOCK 这个 Flag,,那么下面有另外两个 Flag 可以和它一起使用。

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

If 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.

这个文档下面有个说明:If using this to keep the screen on, you should strongly consider using FLAG_KEEP_SCREEN_ON instead. This window flag will be correctly managed by the platform as the user moves between applications and doesn't require a special permission.还是推荐使用FLAG_KEEP_SCREEN_ON

权限获取

android.permission.WAKE_LOCK 的权限是必须的。

Any application using a WakeLock must request the android.permission.WAKE_LOCK permission in an element of the application's manifest.

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

FLAG_KEEP_SCREEN_ON

相关文章

- EOF -

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动。

转载请注明:文章转载自 Binkery 技术博客 [https://binkery.com]

本文标题: Android 屏幕锁 - WakeLock

本文地址:https://binkery.com/archives/162.html

android系统锁屏锁怎么解决方法,Android 屏幕锁 - WakeLock相关推荐

  1. 微信 android 闪退问题怎么解决方法,Android里微信分享时BUG,微信界面闪退

    只是Android版有问题,苹果版可正常分享,帮忙找下原因,谢谢! 微信界面刚加载,就闪退 Android离线打包运行,检测错误如下: 03-13 22:31:01.921: W/System.err ...

  2. android 微信乱码问题怎么解决方法,Android 微信登录昵称乱码问题,及获取微信用户信息...

    微信第三方登录时昵称,username乱码问题解决方法如下: /** * 获取微信用户信息 * @param access_token 调用凭证 * @param openid 普通用户的标识,对当前 ...

  3. 计算机屏幕尺寸不是全屏,电脑屏幕有黑边撑不满怎么办_电脑屏幕不能全屏显示的解决方法...

    电脑屏幕有黑边撑不满怎么办?平时在使用电脑时候,如果是新手,可能会出现显示屏不能全屏显示的问题,有些情况是分辨率的问题,调整一下就好了,但有时候调整了也没有用,那么该怎么办呢?下面智能手机网小编来具体 ...

  4. android九宫格忘了,九宫格密码忘了怎么办?九宫格锁屏忘记密码解决方法

    有时我们会遇到开机九宫格密码丢失无法进入系统,下面本文就告诉大家九宫格锁屏忘记密码解决方法: 以下操作会有较大的数据风险,可能会导致手机上的个人资料.通讯录.应用丢失,请提前做好数据风险提醒和备份工作 ...

  5. android 百度地图闪退,Android使用百度地图出现闪退及定位时显示蓝屏问题的解决方法...

    使用百度地图出现闪退 一般情况下出现闪退是在AndroidManifest.xml文件中未在application标签中配置 android:name="com.baidu.lbsapi.A ...

  6. 苹果13系统锁屏延迟_iPhone锁屏慢有延迟怎么办 苹果手机锁屏不灵敏解决方法

    iOS的系统生态虽好,但并不代表就是完美的,BUG多多少少还是会有的.只要遇到有使用上的问题,用户都会优先考虑是不是系统BUG导致的.最近有粉丝在反馈,手上的iPhone锁屏的时候总感觉哪里不对,总会 ...

  7. android闪退黑屏,艾诺迪亚4闪退黑屏原因及解决方法

    艾诺迪亚4闪退黑屏原因及解决方法,玩家们在游戏中有的时候会突然闪退或者黑屏,这些基本上都是一下几点原因造成,在下面的艾诺迪亚4闪退中就为玩家们详细地介绍了在游戏过程中突然闪退或者黑屏的原因,以及主要的 ...

  8. android 将图片储存到手机内存不足,Android手机内存不足的解决方法

    Android手机内存不足的解决方法 如果你的安卓手机内存不是很大,安装较多软件,使用一段时间后,安卓手机和容易引起内存不足,会提示手机内存不足,然后速度变慢,无法安装新软件等等.很多对安卓手机不太了 ...

  9. Android webview 写入cookie的解决方法以及一些属性设置

    Android webview 写入cookie的解决方法以及一些属性设置 参考文章: (1)Android webview 写入cookie的解决方法以及一些属性设置 (2)https://www. ...

最新文章

  1. Shell基础命令之echo
  2. C/C++连接MySql数据库
  3. 从Uber微服务看最佳实践如何炼成?
  4. win7 重启 IIS.
  5. 关于Tomcat如何处理Open Redirect的问题
  6. c语言将一个已知头结点的单链表逆序_C语言实现常用数据结构:静态链表数组实现(第5篇)...
  7. HBase体系架构说明
  8. 技术人生:给自己安慰的10句温馨话
  9. SpringCloud工作笔记082---自动化部署Jenkins_Windows下安装使用Jekins
  10. nssm在服务器上的使用超详细说明
  11. kpconv与point transformer异同、算法讲解
  12. 安装neptune-client库
  13. 怎么轻松学JAVA(三个月拿实习Offer):小猿的JAVA后端之路(持续更新)
  14. shap库源码和代码实现
  15. 什么样的女孩是真正爱你的!
  16. 蓝桥杯训练题1427: [蓝桥杯][2013年第四届真题]买不到的数目【筛选符合题目的数字。有点类似筛素数】
  17. 进阶持续威胁(APT)与入侵防御系统
  18. 实例2:python操作Excel文件 - 插入列、分列、删除列、移动位置
  19. 重组人碱性成纤维细胞生长因子(FGF 2)参考文献
  20. 数“聚”价值 正逢其时 | 首席数字官CDO在线启动

热门文章

  1. 如何使用 markdown 写一个漂亮的简历(带排版和布局)
  2. ITE SoC HMI产品介绍
  3. 将多个Excel工作薄合并成一个工作薄如操作过程
  4. 【Java】蓝桥杯历届试题 题解
  5. java object save_Java之Object类和常用的API
  6. PLC网关金鸽BL102:采集三菱FX-5U数据如何转成MQTT上报?
  7. 简易电子琴演奏器_北邮大二上数电实验报告
  8. JS函数 比较三个数字的最大值
  9. 什么是超文本标记语言
  10. 宝鸡市2017年推进城市建设和管理向全国领先迈进综述