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);}//建议计数模式设置为truemWakeLock.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/

保持屏幕唤醒的几种方式总结相关推荐

  1. Android中获取屏幕信息的几种方式

    Android中获取屏幕信息的几种方式 方案一 方案二 方案三 Note:以下方案中的this均指Activity. 方案一 WindowManager wm = (WindowManager) th ...

  2. Android获取屏幕信息的几种方式

    方式一 //获取屏幕信息的几种方式一:DisplayMetrics metrics = new DisplayMetrics();WindowManager manager = (WindowMana ...

  3. android屏幕适配的五种方式_讲一讲Android 9.0系统的新特性,对刘海屏设备进行适配...

    黑客技术点击右侧关注,了解黑客的世界! Java开发进阶点击右侧关注,掌握进阶之路! Python开发点击右侧关注,探讨技术话题!作者丨郭霖来源丨郭霖(guolin_blog) 其实Android 9 ...

  4. ios 旋转屏幕试图切换_总结iOS App开发中控制屏幕旋转的几种方式

    在iOS6之前的版本中,通常使用 shouldAutorotateToInterfaceOrientation 来单独控制某个UIViewController的方向,需要哪个viewControlle ...

  5. QT 屏幕旋转的两种方式

    1.方式一: #include "mainwindow.h" #include <QApplication> #include <QGraphicsView> ...

  6. 全志T507操作小技巧连载1-T507屏幕切换的两种方式

    一.硬件操作平台介绍 FETT507-C核心板集成全志T507四核车规级处理器设计开发,Cortex-A53架构,主频1.5GHz,集成G31 GPU,内存2GB DDR3L,存储8GB eMMC.整 ...

  7. 全志T507屏幕切换的两种方式

    本文介绍了飞凌嵌入式全志T507屏幕切换控制的两种方式. 二.屏幕切换 OKT507-C开发板支持MIPI DSI.HDMI.TV等多种屏幕接口,同时可以进行两个屏幕的同显和异显,可灵活指定HDMI接 ...

  8. java线程阻塞唤醒的四种方式

    java在多线程情况下,经常会使用到线程的阻塞与唤醒,这里就为大家简单介绍一下以下几种阻塞/唤醒方式与区别,不做详细的介绍与代码分析 suspend与resume Java废弃 suspend() 去 ...

  9. Android屏幕适配的两种方式

    ScreenHelper github 地址:github.com/bugyun/Scre- 欢迎 star 和 提问. 第一种适配方式 - sw 方式 插件版本: 使用方法 在项目的根 build. ...

最新文章

  1. 之全能忙内_临沧大名山茶:喝过诸多忙肺茶,但你不知道什么是“隔年香”
  2. html中radio,checkbox值的获取、赋值、注册事件
  3. leetcode 40. 组合总和 II 思考分析
  4. [html] 写个布局,当页面高度不够时,底部固定在下面,反之不固定
  5. 【华为出品】物联网全栈开发实战营第2期来啦!送海思开发板
  6. 1215课后练习----判断字符串位置
  7. 百度宣布7nm制程AI芯片“昆仑芯2”实现量产
  8. dataframe 根据条件查找_python – 在pandas DataFrame中查找(仅)满足给定条件的第一行...
  9. [转]coolfire黑客入门教程系列之(六)
  10. 【原创】Structure from Motion (SfM)算法测试---3D重建简介
  11. SAP——ABAP报表的一般格式
  12. 关闭Tomcat报错The web application [ROOT] appears to have started a thread named [Abandoned connectio
  13. api文档 luci_openwrt中luci学习笔记
  14. 阿里 java 面试题 p6_「独家」五面阿里P6:Java开发面试题及答案
  15. J9说数字科普为何DeFi永不消亡
  16. Steam游戏—底特律:化身成人,回家章节中女主角上二楼打扫卫生,按L Shift开窗按不动怎么办
  17. 信息学奥赛一本通:1084:幂的末尾
  18. 流量为王时代,APP推广需要解决难题,如何解决分享绑定上下级关系。
  19. 服务器配置jdk环境
  20. 仿【得物】微信小程序实战全教程(动手就会)

热门文章

  1. 【渝粤教育】 国家开放大学2020年春季 1459公共卫生伦理 参考试题
  2. 嵌入式的发展前景如何?
  3. 移动边缘计算(MEC)促进5G发展的分析
  4. 洛谷P2486 lct做法
  5. 论文里的摘要和引言的区别
  6. 70道Dubbo面试题及答案(最新整理)
  7. 网络舆情分析技术 读书笔记1
  8. 微软mysql官网_az mysql
  9. 递推递归练习 B - 王小二切饼
  10. js 图片下载(不是直接在页面打开图片)