Android小知识-电量优化WakeLock的使用
本平台的文章更新会有延迟,大家可以关注微信公众号-顾林海,包括年底前会更新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类型有以下几种:
PARTIAL_WAKE_LOCK:保持COU正常运转,屏幕和键盘灯有可能会关闭。
SCREEN_DIM_WAKE_LOCK:保存CPU运转,允许保存屏幕显示但有可能变暗,允许关闭键盘灯。
FULL_WAKE_LOCK:保持CPU运转,保持屏幕高亮显示,键盘灯也保持亮度。
ACQUIRE_CAUSES_WAKEUP:强制屏幕亮起,这种锁主要用于一些必须通知用的操作。
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的使用相关推荐
- Android小知识10则(上)(2018.8重编版)
Android小知识10则(下) 目录 前言 横竖屏锁定 不同分辨率的图标 将字符串写在资源文件中 为AlertDialog设置点击监听 ProgressDialog了解一下 最后 前言 Androi ...
- Android小知识10则(下)
Android小知识10则(上) github传送门 注: 在目录中点击可以跳转到具体代码页 目录 Chronometer和CountDownTimer计时器 Chronometer的使用 Count ...
- Android9.0 P 电源管理android各版本电量优化功能策略
针对电量优化android的改动 在最近几个android版本中已存在的电量优化功能基础上,Android 9 引入了一些新功能来持续改进设备电源管理,以确保将系统资源提供给最需要它们的应用. 近几个 ...
- android小知识(1)
1.Android名称的由来. 大家可能不知道,Android一词的本义原指"机器人",它也是谷歌于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操 ...
- Android 小知识
1.判断sd卡是否存在 boolean sdCardExist = Environment.getExternalStorageState().equals(android.os.Environmen ...
- Android 小知识
记录点零碎的小知识点. 目录 1.BindingView中引用include中的控件 2.将文件复制到手机根目录中 3.android string占位符 4.动态更改shape色值 5.查看apk签 ...
- Android小知识-Fragment
转载请标明出处:[顾林海的博客] 个人开发的微信小程序,目前功能是书籍推荐,后续会完善一些新功能,希望大家多多支持! ##前言 今天还是总结下Android中的小知识点Fragment,Fragmen ...
- 中餐菜单分类名称创意_外卖运营小知识:优化外卖菜单,挽回店铺亏损
出现这些问题,很多老板都会在平台活动.运营等方面找原因,但你有没有想过可能是你的外卖菜单出了问题. 优质的外卖菜单,不仅代表了良好的第一印象.还能提高用户体验,促进菜品的销售. 但是外卖平台的菜单设计 ...
- android byte转string_唠点儿你不一定知道的Android小知识
本文作者 作者:郑卫超 链接: https://vchao.blog.csdn.net/article/details/104349868 本文由作者授权发布. 1. YYYY 和 yyyy 不一样 ...
最新文章
- 首位猪心移植患者去世!术后存活2个月,创造医学里程碑;官方讣告:哀悼并感谢所作巨大贡献...
- 周期方波的傅里叶级数系数
- AXIS2整合spring需要的jar,以及大部分缺少jar所报的异常
- 应用程序委托协议栈发送消息
- config设置源 使用pip_conda和pip重新配置源
- Delphi指针总结
- C语言指针和指针变量
- C#的rdlc报表分组汇总学习
- App Store上的开源应用汇总
- 戴尔计算机没有硬盘驱动,戴尔做系统读取不到驱动器-戴尔笔记本出现硬盘驱动器无安装该如何操作?...
- Laravel文档梳理3、CSRF保护
- ra_customer_trx_all 的XLA会计科目
- 浏览器检测是否支持webrtc(看看你的浏览器能不能h5视频)
- 打开mysql 的时候报错_关于mysql的启动报错处理
- android 获取视频编码,Android视频编码
- 我想要成为一个什么样的人
- 人工智能知识全面讲解:特征工程
- win7提示盗版 且各种工具无法激活
- 今晚“狼来了”|思一独角兽的狼人杀攻略
- win10计算机入门使用教程,win10使用教程_win10系统新手教程
热门文章
- Keil5.15使用GCC编译器链接.a库文件
- 6.2 IP子网划分
- 使用ReaderWriterLock优化文件缓存
- 【转】做正确的事情,等着被开除(Do the right thing, Wait to get fired)
- leetcode 3. Longest Substring Without Repeating Characters
- tomcat8 安装部署--一键版本
- linux change linux login shell
- gitlab邮箱验证 邮箱提醒设置
- ubuntu 14.04 安装 vmware 10 X64 后无法启动解决方法
- DLL技术应用04 - 零基础入门学习Delphi47