本平台的文章更新会有延迟,大家可以关注微信公众号-顾林海,包括年底前会更新kotlin由浅入深系列教程,目前计划在微信公众号进行首发,如果大家想获取最新教程,请关注微信公众

Android会不断关闭各种硬件来延长手机的待机时间,比如在一段时间内未做任何操作,屏幕会逐渐变暗直至关闭,CPU进入低功耗的睡眠状态,系统这些机制都是为了节约更多的电量。

在真实环境中,有些APP(比如视频播放类和阅读类等)在一些特定的场景下会不停的唤醒手机,防止屏幕自动变暗关闭,唤醒手机的方式可以通过使用PowerManager.WakeLock来保持CPU工作并防止屏幕关闭。

WakeLock是一种锁的机制,只要应用拿着这个锁,CPU就无法进入休眠状态,一直处于工作状态。

WakeLock的使用方式如下:

    @SuppressLint("InvalidWakeLockTag")private void initWakeLock() {if (null == mWakeLock) {PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);mWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK |PowerManager.ON_AFTER_RELEASE,"mainLockService");if(null!=mWakeLock){mWakeLock.acquire();
//                另一种方式
//                mWakeLock.acquire(60 * 10 * 1000);}}}
复制代码

上述代码中,首先获取PowerManager的实例powerManager,然后通过newWakeLock方法获取WakeLock相应的锁,其中第一个参数表示哪种类型的锁,不同的锁对系统CPU、屏幕和键盘有不同的管理策略,第二个参数表示锁的自定义名称。

Android系统中的WakeLoke类型有以下几种:

  1. PARTIAL_WAKE_LOCK:保持COU正常运转,屏幕和键盘灯有可能会关闭。

  2. SCREEN_DIM_WAKE_LOCK:保存CPU运转,允许保存屏幕显示但有可能变暗,允许关闭键盘灯。

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

  4. ACQUIRE_CAUSES_WAKEUP:强制屏幕亮起,这种锁主要用于一些必须通知用的操作。

  5. ON_AFTER_RELEASE:当锁被释放时,保持屏幕亮起一段时间。

使用WakeLock需要相应的权限:

<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.DEVICE_POWER" />
复制代码

使用WakeLock时,需要切记及时释放锁,释放锁可以通过release方法来释放:

   private void releaseWakeLock() {if (null != mWakeLock) {mWakeLock.release();mWakeLock = null;}}
复制代码

以上是手动释放锁,当然,如果你使用的是acquire(long timeout)方法时,就无需使用release方法来释放锁了,它在timeout时间后自动释放锁。


搜索微信“顾林海”公众号,定期推送优质文章。

Android小知识-电量优化WakeLock的使用相关推荐

  1. Android小知识10则(上)(2018.8重编版)

    Android小知识10则(下) 目录 前言 横竖屏锁定 不同分辨率的图标 将字符串写在资源文件中 为AlertDialog设置点击监听 ProgressDialog了解一下 最后 前言 Androi ...

  2. Android小知识10则(下)

    Android小知识10则(上) github传送门 注: 在目录中点击可以跳转到具体代码页 目录 Chronometer和CountDownTimer计时器 Chronometer的使用 Count ...

  3. Android9.0 P 电源管理android各版本电量优化功能策略

    针对电量优化android的改动 在最近几个android版本中已存在的电量优化功能基础上,Android 9 引入了一些新功能来持续改进设备电源管理,以确保将系统资源提供给最需要它们的应用. 近几个 ...

  4. android小知识(1)

    1.Android名称的由来. 大家可能不知道,Android一词的本义原指"机器人",它也是谷歌于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操 ...

  5. Android 小知识

    1.判断sd卡是否存在 boolean sdCardExist = Environment.getExternalStorageState().equals(android.os.Environmen ...

  6. Android 小知识

    记录点零碎的小知识点. 目录 1.BindingView中引用include中的控件 2.将文件复制到手机根目录中 3.android string占位符 4.动态更改shape色值 5.查看apk签 ...

  7. Android小知识-Fragment

    转载请标明出处:[顾林海的博客] 个人开发的微信小程序,目前功能是书籍推荐,后续会完善一些新功能,希望大家多多支持! ##前言 今天还是总结下Android中的小知识点Fragment,Fragmen ...

  8. 中餐菜单分类名称创意_外卖运营小知识:优化外卖菜单,挽回店铺亏损

    出现这些问题,很多老板都会在平台活动.运营等方面找原因,但你有没有想过可能是你的外卖菜单出了问题. 优质的外卖菜单,不仅代表了良好的第一印象.还能提高用户体验,促进菜品的销售. 但是外卖平台的菜单设计 ...

  9. android byte转string_唠点儿你不一定知道的Android小知识

    本文作者 作者:郑卫超 链接: https://vchao.blog.csdn.net/article/details/104349868 本文由作者授权发布. 1. YYYY 和 yyyy 不一样 ...

最新文章

  1. 首位猪心移植患者去世!术后存活2个月,创造医学里程碑;官方讣告:哀悼并感谢所作巨大贡献...
  2. 周期方波的傅里叶级数系数
  3. AXIS2整合spring需要的jar,以及大部分缺少jar所报的异常
  4. 应用程序委托协议栈发送消息
  5. config设置源 使用pip_conda和pip重新配置源
  6. Delphi指针总结
  7. C语言指针和指针变量
  8. C#的rdlc报表分组汇总学习
  9. App Store上的开源应用汇总
  10. 戴尔计算机没有硬盘驱动,戴尔做系统读取不到驱动器-戴尔笔记本出现硬盘驱动器无安装该如何操作?...
  11. Laravel文档梳理3、CSRF保护
  12. ra_customer_trx_all 的XLA会计科目
  13. 浏览器检测是否支持webrtc(看看你的浏览器能不能h5视频)
  14. 打开mysql 的时候报错_关于mysql的启动报错处理
  15. android 获取视频编码,Android视频编码
  16. 我想要成为一个什么样的人
  17. 人工智能知识全面讲解:特征工程
  18. win7提示盗版 且各种工具无法激活
  19. 今晚“狼来了”|思一独角兽的狼人杀攻略
  20. win10计算机入门使用教程,win10使用教程_win10系统新手教程

热门文章

  1. Keil5.15使用GCC编译器链接.a库文件
  2. 6.2 IP子网划分
  3. 使用ReaderWriterLock优化文件缓存
  4. 【转】做正确的事情,等着被开除(Do the right thing, Wait to get fired)
  5. leetcode 3. Longest Substring Without Repeating Characters
  6. tomcat8 安装部署--一键版本
  7. linux change linux login shell
  8. gitlab邮箱验证 邮箱提醒设置
  9. ubuntu 14.04 安装 vmware 10 X64 后无法启动解决方法
  10. DLL技术应用04 - 零基础入门学习Delphi47