Android中保持屏幕常亮的三种使用方法

这篇具有很好参考价值的文章主要介绍了Android中保持屏幕常亮的三种使用方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、设置Flag

二、使用View类中的属性方法

1、Xml布局中设置:

2、功能代码中设置:

三、Wakelock 锁定机制

1、简介

2、作用

3、分类标志

4、使用方法

(1)在AndroidManifest.xml中设置权限

(2)通过PowerManager类获取WakeLock类的实例对象

(3)注意事项

(4)优化措施

(5)总结


一、设置Flag

这种方法官方推荐使用,最简单,不需要申请权限。

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

二、使用View类中的属性方法

1、Xml布局中设置:

在主界面引用的xml文件中,找到顶层布局,添加以下属性:

android:keepScreenOn="true"  

2、功能代码中设置:

topLayout.setKeepScreenOn(true);

三、Wakelock 锁定机制

1、简介

在Android应用开发中,Wakelock被广泛应用于保持屏幕或CPU处于唤醒状态,以便应用程序可以继续执行后台任务,直到任务完成。 Wakelock是为了解决一些特定的应用场景而产生的概念,它的作用是保持屏幕、CPU或者一些其他机器状态继续运行,以满足一些特定的需求。

WakeLock是Android框架层提供的一套机制,应用使用该机制可以达到控制Android设备状态的目的。这里的设备状态主要指屏幕的打开关闭,CPU的保持运行。简单的理解WakeLock是让系统保持”清醒”的一种手段。

2、作用

在某些情况下,一些应用程序用户即使长时间不与其交互,也要阻止手机进入休眠状态。一个例子就是我们在看视频时,手机屏幕要保持开启状态。当手机灭屏状态下保持一段时间后,系统会进入休眠,一些后台运行的任务就可能得不到正常执行,比如网络下载中断,后台播放音乐暂停等。Android为此设计了WakeLock。WakeLock为了解决这类问题,应用只要申请了WakeLock,那么在释放WakeLock之前,系统不会进入休眠,即使在灭屏的状态下,应用要执行的任务依旧不会被系统打断。

  •  保持CPU处于唤醒状态,使得应用程序可以继续执行后台任务;
  •  保持屏幕处于唤醒状态,使得应用程序可以持续地向用户展示信息;
  •  保持设备处于唤醒状态,保证某些特定的任务可以得到正常执行。

Wakelock常用于以下场景中:

  • 音乐播放:当音乐应用程序正在播放时,它需要保持CPU处于唤醒状态,以便于音乐可以正常播放,并且保持屏幕处于唤醒状态,以便于用户可以查看当前播放曲目;
  • 后台任务:当应用程序需要在后台执行某些任务时,它需要保证CPU处于唤醒状态,以便于任务可以得到正常执行,并且可能需要保持屏幕处于唤醒状态,以便于用户可以获取某些信息;
  • 位置监听:当应用程序需要对设备的位置信息进行监听时,它需要保证CPU处于唤醒状态,以便于可以正确地获取设备的位置信息。

3、分类标志

  • PARTIAL_WAKE_LOCK :保持CPU 运转,屏幕和键盘灯有可能是关闭的。
  • SCREEN_DIM_WAKE_LOCK :保持CPU 运转,允许保持屏幕显示但有可能是灰的,允许关闭键盘灯
  • SCREEN_BRIGHT_WAKE_LOCK :保持CPU 运转,允许保持屏幕高亮显示,允许关闭键盘灯
  • FULL_WAKE_LOCK :保持CPU 运转,保持屏幕高亮显示,键盘灯也保持亮度
  • ACQUIRE_CAUSES_WAKEUP: 强制点亮屏幕,比如应用接收到通知后,屏幕亮起
  • ON_AFTER_RELEASE: 释放WakeLock后,屏幕不马上熄灭,保持屏幕亮起一段时间
  • UNIMPORTANT_FOR_LOGGING: 隐藏的flag,系统级别才会用到
  • DOZE_WAKE_LOCK/DRAW_WAKE_LOCK: 隐藏的分类,系统级别才会用到
  • PROXIMITY_SCREEN_OFF_WAKE_LOCK: 基于距离感应器熄灭屏幕。最典型的运用场景是我们贴近耳朵打电话时,屏幕会自动熄灭

4、使用方法

       WakeLock是PowerManager的内部类,其代码路径位于:

  frameworks/base/core/java/android/os/PowerManager.java

(1)在AndroidManifest.xml中设置权限
<uses-permission android:name="android.permission.WAKE_LOCK" /> 
(2)通过PowerManager类获取WakeLock类的实例对象

         通常可以在onResume()中调用acquire()方法,在onPause()方法中调用release()方法。    

PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK, "tag:CpuKeepRunning");

//或 执行 wakeLock.acquire();
wakeLock.acquire(1000 * 60);

@Override  
protected void onResume() {  
    super.onResume();  

    //可以在onResume()中执行acquire()方法
    if (wakeLock!= null) {  
        wakeLock.acquire();  
    }  
}  
  
@Override  
protected void onPause() {  
    super.onPause();  
    if (wakeLock!= null) {  
        wakeLock.release();  
    }  
}  

(3)注意事项
  • 官方已经不推荐使用这种方式保持亮屏,使用不当会让应用变成“电量杀手”,请尝试其他两种方式。
  • 申请WakeLock有两种方式:acquire()和acquire(long timeout),后者相对更安全点。如果忘记了release WakeLock,经过 timeout 的时长后,系统会自动release。一般情况下,使用完WakeLock需要尽快释放,如果忘记释放,很快就会耗光电量;
  • 为了防止出现问题,建议使用带超时的WakeLock.acquire()版本,它会在超过时限后释放WakeLock。比说,在播放视频时,可以使用视频的时长度作为超时时间,这样在视频播放完后就会自动释放WakeLock。我们通过源码可以看到,它的原理是在调用acquire()申请一个WakeLock的时候,通过Handler.postDelay()发送一个延迟消息来实现到达时间后自动释放的;
  • 请不要使用无限期的Wakelock,这会导致设备和应用程序在长时间内不休眠,最终会耗尽设备的电池;
  • 只有在必要的时候才使用SCREEN_ON、SCREEN_DIM、SCREEN_BRIGHT等类型的Wakelock,其他类型的Wakelock能够更好地满足应用程序的需求;
  • 尽可能地避免使用Wakelock,除非您的应用无法正常工作或无法完成所需的任务。
(4)优化措施

        当您使用Wakelock时,为了最大限度地减少对电池的耗电量,您可以执行以下优化措施:

  • 仅在需要时申请Wakelock,并且在任务完成后尽早释放它;
  • 使用标志,以便于检查设备是否处于唤醒状态,无需频繁地申请和释放Wakelock;
  • 优化Wakelock的使用,避免无效的唤醒操作,以便于减少对电池的耗电量;
  • 使用AlarmManager或JobScheduler等定时任务来代替Wakelock,以便于更好地保持电池寿命。
(5)总结

Android Wakelock是Android提供的一种锁定机制,能够保持设备处于唤醒状态,以便于应用程序可以在后台继续执行任务。 Wakelock的使用非常简单,只需要在需要保持唤醒状态的地方调用Wakelock.acquire()方法即可,当不需要保持唤醒状态时可以调用Wakelock.release()方法结束。 在使用Android Wakelock时,需要注意几个问题,如必须调用Wakelock.release()方法释放Wakelock、避免滥用Wakelock等。文章来源地址https://www.toymoban.com/news/detail-722456.html

到了这里,关于Android中保持屏幕常亮的三种使用方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Tomcat安装使用与部署Web项目的三种方法

    ✅作者简介:C/C++领域新星创作者,为C++和java奋斗中 ✨个人社区:微凉秋意社区 🔥系列专栏:MySql一点通 📃推荐一款模拟面试、刷题神器👉注册免费刷题 🔥前言 今天带来 Tomcat 的安装教程,也会讲到各种目录下代表的含义,重点是在Tomcat服务器上面部署Web项目的三种方法

    2024年02月02日
    浏览(37)
  • macOS 设置屏幕常亮 不休眠

    2024年01月22日
    浏览(22)
  • 使用 GNU 汇编语法编写 Hello World 程序的三种方法

    本篇我们使用汇编来写一个经典的  Hello world  程序。 运行环境: OS:Ubuntu 18.04.5 LTS x86-64 gcc:version 4.8.5 在用户空间编写汇编程序输出字符串,有三种方法: 调用C库函数  printf 使用软中断  int 0x80 使用  syscall 系统调用 下面对三种方法,分别进行说明。 为了更好的理解汇

    2024年02月06日
    浏览(42)
  • java获取系统CPU和内存使用率的三种方法

    获取系统CPU和内存的三种方法: 1、使用OperatingSystemMXBean获取 2、使用sigar方法获取 3、使用oshi方法获取 以下是我在我的机子上对三种方法测试的比较 方法    准确率 OperatingSystemMXBean    获取的内存数据准确,CPU差距有点大 sigar    获取的内存数据稍微有点差距,CPU相对

    2024年04月13日
    浏览(36)
  • FLutter 开发中 fijkplayer设置屏幕常亮

    ` 目前在做FLutter种的视频播放功能,遇到了视频播放的时候,屏幕突然黑屏了。网上找了很多,无论是设置在原生的Activity界面,添加如下代码, 还是在xml中设置 都无效。甚至在Fragment中的onCreateView方法中加入代码, 又或者,在任意一个View中加入如下代码, 都无效。 后来在

    2024年02月16日
    浏览(32)
  • QT中使用QtXlsx库的三种方法 QT基础入门【Excel的操作】

    对于Linux用户,如果Qt是通过“ apt-get”之类的软件包管理器工具安装的,请确保已安装Qt5开发软件包qtbase5-private-dev QtXlsx是一个可以读写Excel文件的库。它不需要Microsoft Excel,可以在Qt5支持的任何平台上使用。该库可用于从头开始生成新的.xlsx文件从现有.xlsx文件中提取数据编

    2024年02月12日
    浏览(34)
  • 免费使用微软Azure进行文字转语音的三种方法!最自然接近人声的机器配音技术。

    微软的TTS语音合成技术目前已经做到了非常自然,接近真人音色,在不了解前提下有时候真的很难分辨出这是机器合成的声音。 目前微软的文字转语音已经支持21个中文简体的声音,并且支持多种声音风格的选择和语速、音调的调整。 免费使用微软Azure进行文字转语音的方法

    2024年02月03日
    浏览(34)
  • VMWARE虚拟机CentOS6.4系统使用主机无线网卡上网的三种方法介绍

    环境:WIN7旗舰版,台式机,U盘无线上网卡。 虚拟软件:VMware9.0,虚拟系统:CentOS6.4 需要实现虚拟机以独立机形式工作和上网。 介绍一下VMware网络设置的三种方式 1 Host-only连接方式   让虚机具有与宿主机不同的各自独立IP地址,但与宿主机位于不同网段,同时为宿主主机新

    2024年02月06日
    浏览(32)
  • android的三种动画

    只能被用来设置View的动画。 可以使用xml或者java 代码进行实现 xml放在 res/anim/ 下 android:duration 动画持续时间,以毫秒为单位 android:fillAfter 如果设置为true,控件动画结束时,将保持动画最后时的状态 android:fillBefore 如果设置为true,控件动画结束时,还原到开始动画前的状态

    2023年04月11日
    浏览(29)
  • 实现ConfigMap热更新的三种常用方法:使用sidecar、CI脚本和自定义Controller

    目录 背景 方法一:使用ConfigMap-Reload Sidecar 方法二:使用CI脚本实现ConfigMap热更新 方法三:使用Controller实现ConfigMap热更新 结论 ConfigMap是Kubernetes中用来存储配置信息的一种资源类型。在Kubernetes集群中,ConfigMap被广泛地用于存储应用程序的配置信息。这些配置信息可以包括环

    2024年02月09日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包