管理Android设备的唤醒状态
当一个Android设备闲置时,首先它的屏幕将会变暗,然后关闭屏幕,最后关闭CPU。 这样可以防止设备的电量被迅速消耗殆尽。但是,有时候也会存在一些特例:
Apps such as games or movie apps may need to keep the screen turned on. 例如:用户在玩游戏时,需要保持屏幕常亮
Other applications may not need the screen to remain on, but they may require the CPU to keep running until a critical operation finishes. 又如:某些特定应用不需要屏幕保持常亮,但是CPU持续运行直到某些逻辑执行结束
下述主题讨论,如何在必要的时候保持设备唤醒,同时又不会过多消耗电量。
主题一:保持设备唤醒状态
To avoid draining the battery, an Android device that is left idle quickly falls asleep. However, there are times when an application needs to wake up the screen or the CPU and keep it awake to complete some work. 为了避免电量过度消耗,Android设备会在被闲置之后迅速进入睡眠状态。然而有时候应用会需要唤醒屏幕或者是唤醒CPU并且保持它们的唤醒状态,直至一些任务被完成。
需要依据具体的应用场景达到上述目的,但必须使用最轻量级的方式以免对系统资源造成影响。
如何保持屏幕常亮?
某些应用需要保持屏幕常亮,比如游戏与视频应用。最好的方式是在你的Activity中(且仅在Activity中,而不是在Service或其他应用组件里)使用FLAG_KEEP_SCREEN_ON属性。
- public class MainActivity extends Activity {
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
- }
该方法的优点与唤醒锁(Wake Lock)不同,它不需要任何特殊的权限,系统会正确地管理应用之间的切换,且不必关系释放资源的问题。
另一个方式是在布局文件中声明android:keepScreenOn属性:
- <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:keepScreenOn="true">
- ...
- </RelativeLayout>
使用android:keepScreenOn="true"与使用FLAG_KEEP_SCRRE_ON等效。你可以选择最适合你的应用的方法。在Activity中通过代码设置常亮标识的优点在于:你可以通过代码动态清除这个标示,从而使屏幕可以关闭。
需要注意的是:除非你不再希望正在运行的应用长时间点亮屏幕(例如:在一定时间无操作发生后,你想要将屏幕关闭),否则你是不需要清除FLAG_KEEP_SCRRE_ON 标识的。WindowManager会在应用进入后台或者返回前台时,正确管理屏幕的点亮或者关闭。但是如果你想要显式地清除这一标识,从而使得屏幕能够关闭,可以使用getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)方法。
主题二:调度重复的闹钟
管理Android设备的唤醒状态的更多相关文章
- Android屏幕保持唤醒状态
我们程序偶尔会有需要屏幕一直或较长时间的保持唤醒状态,而用户的睡眠时间又设置的比较短.这时可能会对程序以及用户的使用造成一定的影响.在Android中有两种方法,可以让我们在我们需要保持唤醒的页面长时 ...
- Android多媒体-MediaPlayer唤醒锁及音频焦点
MediaPlayer的唤醒锁 一般使用MediaPlayer播放音频流,推荐使用一个Service来承载MediaPlayer,而不是直接在Activity里使用.可是Android系统的功耗设计里 ...
- Android判断当前的android设备是否处于联网状态
首先,要想获得当前android设备是否处于联网状态,那么android本身给我们提供了一个服务 private ConnectivityManager connectivityManager;//用 ...
- Android之判断设备网络连接状态,并判断连接方式
在Android开发过程中,对于一个需要连接网络的Android设备,对设备的网络状态检测是很有必要的!有很多的App都需要连接网络.判断设备是否已经连接网络,并且在连接网络的状态下判断是wifi无线 ...
- android设备休眠机制
如果一开始就对Android手机的硬件架构有一定的了解,设计出的应用程序通常不会成为待机电池杀手,而要设计出正确的通信机制与通信协议也并不困难.但如果不去了解而盲目设计,可就没准了. 首先Androi ...
- android设备休眠
从上面的连接里面找到了一些资料: 如果一开始就对Android手机的硬件架构有一定的了解,设计出的应用程序通常不会成为待机电池杀手,而要设计出正确的通信机制与通信协议也并不困难.但如果不去了解而盲目设 ...
- 【转】解决在Android设备播放音频与其他应用重音的问题,并监听耳机的控制按钮
概述 在安卓开发中免不了需要播放一点音乐了,音频了.但是这时候有别的应用正在播放,这时候就会出现重音的现象,完全影响用户体验,我们的项目就遇上了这样的尴尬,然后查找了一些文档,记录一下: 管理音频焦点 ...
- adb通过wifi连接android设备
问题背景 近期的项目测试中,需要将移动设备与厂商机器进行usb连接视频传输(投屏).测试过程中需要定位问题,经常需要查看实时日志,移动设备已经和厂商机器usb连接投屏,无法用usb连接到PC,那么有什 ...
- adb调试android设备 说的比较清楚的一篇文章
ADB支持两种连接Android系统的方式,USB方式及网络方式.一般手机及平板默认会设置为USB方式.android系统底层运行着一个服务(adbd),用于相应和管理大家在电脑端的adb命令连接,这 ...
随机推荐
- 第九节: EF的性能篇(二) 之 Z.EntityFramework.Extensions程序集解决EF的性能问题
一. 综述 该模块主要介绍:EF的性能优化插件Z.EntityFramework.Extensions,该插件收费. (一). 简介 1. 相关网站:http://www.zzzprojects.co ...
- npm常用命令学习(npm install -D,semver版本规范, npm进行版本管理的最佳实践用法)
什么是npm npm有两层含义.一层含义是Node的开放式模块登记和管理系统,网址为npmjs.org.另一层含义是Node默认的模块管理器,是一个命令行下的软件,用来安装和管理Node模块. npm ...
- 深入学习css伪类和伪元素及其用法
前言 CSS的伪类和伪元素在平时的代码中经常会出现,可是一旦别人问你,什么是伪类,什么是伪元素,可能还是不能完整的表述出来,下面我们来一探究竟. 伪类和伪元素定义 伪类用于在页面中的元素处于某个状态时 ...
- ios打包 上架 了解
苹果开发者中心 https://developer.apple.com/account 上架收费相关了解 https://www.jianshu.com/p/681f00a561ca ios打包 上 ...
- DataBase vs Data Warehouse
Database https://en.wikipedia.org/wiki/Database A database is an organized collection of data.[1] A ...
- Pipeline build step with parameters
build step https://jenkins.io/doc/pipeline/steps/pipeline-build-step/#build-build-a-job 一个任务的执行触发,另外 ...
- C++自定义String字符串类,支持子串搜索
C++自定义String字符串类 实现了各种基本操作,包括重载+号实现String的拼接 findSubStr函数,也就是寻找目标串在String中的位置,用到了KMP字符串搜索算法. #includ ...
- JS实现定时任务,每隔N秒请求后台——setInterval定时和ajax请求
DiGui = function (param) { $.ajax({ success: function (returnValue) { window.setInterval("fnSet ...
- Ubuntu 18.04 LTS搭建GO语言开发环境
一.下载Go语言安装包 官网下载地址:https://golang.org/dl/,使用tar命令将档案包解压到/usr/local目录中: sudo tar -C /usr/local -xzf g ...
- AB PLC与西门子S7-1200以太网通信
前言:在项目实际应用中,经常会遇到两个不同厂家的PLC需要互联进行通信交换数据,由于各自的通信协议有所不同,实现起来的难度较大,通常的做法是借助第三方的网关.本文介绍的是AB PLC与西门子S7-12 ...