保持屏幕唤醒的几种方式总结
2018-03-24 01:36
525 查看
1.通过WakeLock的方式
首先设置唤醒锁的权限<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.DEVICE_POWER"/>
代码示例:
private PowerManager.WakeLock mWakeLock; private void acquireWakeLock() { if (mWakeLock == null) { PowerManager powerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE); mWakeLock = powerManager.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, TAG); } //建议计数模式设置为true mWakeLock.setReferenceCounted(false); mWakeLock.acquire(60 * 1000); } private void releaseWakeLock() { if (mWakeLock.isHeld()) mWakeLock.release(); }`
总结:
尽量使用 acquire(long timeout) 设置超时, (也被称作超时锁). 例如网络请求的数据返回时间不确定, 导致本来只需要10s的事情一直等待了1个小时, 这样会使得电量白白浪费了. 设置超时之后, 会自动释放已节省点远.建议计数模式setReferenceCounted()设置为true,这样调用一次 release() 就会释放所有锁。
兼容性问题:PowerManager.SCREEN_DIM_WAKE_LOCK模式已经在废弃。
2.通过window的flag属性设置
示例代码:private void acquireWakeLock(Activity activity) { if (activity != null && activity.getWindow() != null) { activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } } private void releaseWakeLock(Activity activity) { if (activity != null && activity.getWindow() != null) { activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } }
`
3.通过设置View的属性
在布局文件里加上android:keepScreenOn="true"
总结:
兼容性:采用window的flag的方式的兼容性更广Api的友好性:可以手动进行管理屏幕的唤醒与否
综合比较选择window的flag方式。
参考文章:
https://blog.csdn.net/a57565587/article/details/51669520/
https://www.jianshu.com/p/48ed37738a9e/
相关文章推荐
- android 保持屏幕常亮和唤醒屏幕的方式
- 总结iOS App开发中控制屏幕旋转的几种方式
- 总结iOS App开发中控制屏幕旋转的几种方式
- android保持屏幕常亮以及唤醒屏幕的方式
- 总结iOS App开发中控制屏幕旋转的几种方式
- 总结iOS App开发中控制屏幕旋转的几种方式
- [转]activemq的几种基本通信方式总结
- Java集合遍历的几种方式总结及比较
- ActiveMQ的几种基本通信方式总结
- activemq的几种基本通信方式总结
- 几种获取屏幕大小的方式。
- 文件存储的几种方式总结
- JS几种数组遍历方式总结
- oracle 数据库关闭的的几种方式总结
- js关闭当前页面(窗口)的几种方式总结
- 总结运行SSIS包的几种方式
- android刷新UI的几种方式总结
- 创建Spring Boot项目的几种方式总结(推荐)
- 【Spring 系列 给IOC容器添加组件的几种方式总结】
- rpm 包的Linux 如何让屏幕保持唤醒状态