管理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)方法。

主题二:调度重复的闹钟

时间: 2024-11-08 18:36:12

管理Android设备的唤醒状态的相关文章

获取android设备wifi连接状态

本文将介绍如何获取android设备wifi连接状态! 添加访问权限(AndroidManifest.xml文件里) <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> Java代码(MainActivity.java文件) package com.example.androidtest; import android.net.ConnectivityManager; impo

Android屏幕保持唤醒状态

我们程序偶尔会有需要屏幕一直或较长时间的保持唤醒状态,而用户的睡眠时间又设置的比较短.这时可能会对程序以及用户的使用造成一定的影响.在Android中有两种方法,可以让我们在我们需要保持唤醒的页面长时间保持唤醒状态 1.Android的电源管理里面提供了“唤醒锁”,它允许我们的设备屏幕能在一定的时间内或一直保持唤醒状态!如下为其简单使用步骤: 申请唤醒锁使用权限 1 <uses-permission android:name="android.permission.WAKE_LOCK&qu

Android多媒体-MediaPlayer唤醒锁及音频焦点

MediaPlayer的唤醒锁 一般使用MediaPlayer播放音频流,推荐使用一个Service来承载MediaPlayer,而不是直接在Activity里使用.可是Android系统的功耗设计里,为了节约电池消耗,假设设备处于睡眠状态.系统将试图减少或者关闭一些没设备必须的特性.包含CUP和Wifi硬件.然后,假设是一个后台播放音乐的应用,减少CUP可能导致在后台执行的时候干扰音频的正常播放.关闭Wifi将可能导致网络音频流的获取出现错误. 为了确保MediaPlayer的承载的服务在系统

Android开发之Mediaplayer状态转换图及音频焦点

前言 之前博客里已经将了MediaPlayer的简单应用,如何使用MediaPlayer在Android应用中播放音频.这篇博客在MediaPlayer使用的基础上,讲解一下MediaPlayer的一些高级功能的使用,以及它的状态转换.对MediaPlayer还不了解的朋友可以先看看之前那篇博客:Android--MP3播放器MediaPlayer. 本篇博客主要内容如下: MediaPlayer的状态变换 MediaPlayer的唤醒锁 MediaPlayer的音频焦点 MediaPlayer

Android判断当前的android设备是否处于联网状态

首先,要想获得当前android设备是否处于联网状态,那么android本身给我们提供了一个服务 private ConnectivityManager connectivityManager;//用于判断是否有网络 connectivityManager = (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);//获取当前网络的连接服务 NetworkInfo info = con

android设备判断网络连接状态

android开发中,在做网络请求前判断当前网络连接状态有时很有必要.本文将介绍如何获取android设备当前网络连接状态! 所需权限(AndroidManifest.xml文件中添加): <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> Java代码(MainActivity.java文件) package com.example.androidtest; import a

Android保持屏幕常亮唤醒状态

第一步:  首先添加权限: <uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission> 第二步:代码实现如下: public class ScreenActivity extends Activity { PowerManager powerManager = null; WakeLock wakeLock = null; @Override protected

XPhone 用来管理Android 和IOS 设备的COM库

花了好长时间,终于出来了第一个测试版本的SDK了,功能现在还不完整,而且肯定有非常多的BUG存在,各位童鞋们,有喜欢研究的可以帮忙测试,并且把demo 完善一下. XPhone 是一套COM 的C++库,这套库用来管理Android 和IOS 设备,提供了非常多接口用来操作设备,使用者只需要简单的调用一些接口就可以做出一个手机助手,使用这套库也许只需要一天时间就可以做出一个雏形.可以在demo 上继续完善功能. SVN地址:   svn://www.oksvn.com/XPhone QQ群: 3

android设备休眠

从上面的连接里面找到了一些资料: 如果一开始就对Android手机的硬件架构有一定的了解,设计出的应用程序通常不会成为待机电池杀手,而要设计出正确的通信机制与通信协议也并不困难.但如果不去了解而盲目设计,可就没准了. 首先Android手机有两个处理器,一个叫Application Processor(AP),一个叫Baseband Processor(BP).AP是ARM架构的处理器,用于运行Linux+Android系统:BP用于运行实时操作系统(RTOS),通讯协议栈运行于BP的RTOS之