PowerManager.WakeLock

PowerManager.WakeLock

  PowerManager.WakerLock是我分析Standup Timer源代码时发现的一个小知识点,Standup Timer 用WakeLock保证程序运行时保持手机屏幕的恒亮(程序虽小但也做得相当的细心,考虑的很周到)。PowerManager 和PowerManager.WakerLock7用于对Android设备的电源进行管理。

  PowerManager:This class gives you control of the power state of the device.

  PowerManager.WakeLock: lets you say that you need to have the device on.

  Android中通过各种Lock锁对电源进行控制,需要注意的是加锁和解锁必须成对出现。先上一段Standup Timer里的代码然后进行说明。

代码

privatevoid acquireWakeLock() {
if (wakeLock ==null) {
Logger.d("Acquiring wake lock");
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, this.getClass().getCanonicalName());
wakeLock.acquire();
}

}

privatevoid releaseWakeLock() {
if (wakeLock !=null&& wakeLock.isHeld()) {
wakeLock.release();
wakeLock =null;
}

}

acquireWakeLock()方法中获取了 SCREEN_DIM_WAKE_LOCK锁,该锁使 CPU
保持运转,屏幕保持亮度(可以变灰)。这个函数在Activity的
onResume中被调用。releaseWakeLock()方法则是释放该锁。它在Activity的
onPause中被调用。利用Activiy的生命周期,巧妙的让 acquire()和release()成对出现。

@Override
protectedvoid onResume()
{
super.onResume();
//获取锁,保持屏幕亮度
acquireWakeLock();
startTimer();
}

代码

PowerManager和WakeLock的操作步骤

  1.   PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);通过 Context.getSystemService().方法获取PowerManager实例。
  2.   然后通过PowerManager的newWakeLock((int flags, String tag)来生成WakeLock实例。int Flags指示要获取哪种WakeLock,不同的Lock对cpu 、屏幕、键盘灯有不同影响。
  3.   获取WakeLock实例后通过acquire()获取相应的锁,然后进行其他业务逻辑的操作,最后使用release()释放(释放是必须的)。

关于int flags

  各种锁的类型对CPU 、屏幕、键盘的影响:

PARTIAL_WAKE_LOCK:保持CPU 运转,屏幕和键盘灯有可能是关闭的。

SCREEN_DIM_WAKE_LOCK:保持CPU 运转,允许保持屏幕显示但有可能是灰的,允许关闭键盘灯

SCREEN_BRIGHT_WAKE_LOCK:保持CPU 运转,允许保持屏幕高亮显示,允许关闭键盘灯

FULL_WAKE_LOCK:保持CPU 运转,保持屏幕高亮显示,键盘灯也保持亮度

ACQUIRE_CAUSES_WAKEUP:Normal
wake locks don‘t actually turn on the illumination. Instead, they cause
the illumination to remain on once it turns on (e.g. from user
activity). This flag will force the screen and/or keyboard to turn on
immediately, when the WakeLock is acquired. A typical use would be for
notifications which are important for the user to see immediately.

ON_AFTER_RELEASE:f
this flag is set, the user activity timer will be reset when the
WakeLock is released, causing the illumination to remain on a bit
longer. This can be used to reduce flicker if you are cycling between
wake lock conditions.

权限获取

要进行电源的操作需要在AndroidManifest.xml中声明该应用有设置电源管理的权限。

<uses-permission android:name="android.permission.WAKE_LOCK"/>
你可能还需要
<uses-permission android:name="android.permission.DEVICE_POWER"/>

另外WakeLock的设置是 Activiy 级别的,不是针对整个Application应用的。

时间: 2024-10-08 15:45:22

PowerManager.WakeLock的相关文章

Android:PowerManager类 电源管理

PowerManager类用于对设备电源状态进行管理:PowerManager.WakeLock类用于保持设备常亮:Android中通过各种Lock锁对电源进行控制,需要注意的是加锁和解锁必须成对出现. 使用Activity的生命周期,以调用保持屏幕常亮和释放屏幕常亮动作. /** * <功能描述> 保持屏幕常亮 * * @return void [返回类型说明] */ private void keepScreenWake() { // 获取WakeLock锁,保持屏幕常亮 mPowerMa

Android提供的系统服务之--PowerManager(电源服务)

Android提供的系统服务之--PowerManager(电源服务) --转载请注明出处:coder-pig 本节引言: 本节主要讲解的Android为我们提供的系统服务中的:PowerManager电源管理的一个API, 用于管理CPU运行,键盘或者屏幕亮起来;不过,除非是迫不得已吧,不然的话,否则应该尽量避免 使用这个类,并且使用完以后一定要及时释放!本节并不太深入的去讲解,因为这个设计到底层的 一些东西,以后需要用到再深入研究,到时再另外写一篇blog总结!所以本节介绍的主要是 一些基本

Android 电源管理 -- wakelock机制

转载地址:http://blog.csdn.net/wh_19910525/article/details/8287202 Wake Lock是一种锁的机制, 只要有人拿着这个锁,系统就无法进入休眠, 可以被用户态程序和内核获得. 这个锁可以是有超时的 或者 是没有超时的, 超时的锁会在时间过去以后自动解锁.如果没有锁了或者超时了, 内核就会启动休眠的那套机制来进入休眠. PowerManager.WakeLock 有加锁和解锁两种状态,加锁的方式有两种: 第一种是永久的锁住,这样的锁除非显式的

Android wakelock机制

Wake Lock是一种锁的机制, 只要有人拿着这个锁,系统就无法进入休眠,可以被用户态程序和内核获得. 这个锁可以是有超时的或者是没有超时的,超时的锁会在时间过去以后自动解锁. 如果没有锁了或者超时了, 内核就会启动休眠的那套机制来进入休眠. PowerManager.WakeLock 有加锁和解锁两种状态,加锁的方式有两种,一种是永久的锁住,这样的锁除非显式的放开,是不会解锁的,所以这种锁用起来要非常的小心.第二种锁是超时锁,这种锁会在锁住后一段时间解锁. 在创建了 PowerManager

PowerManager使用实例1(上)

文件1 MainActivity.java: import android.app.Activity; import android.content.Context; import android.content.res.Resources; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.os.PowerManager; import android.o

Android之PowerManager&amp;BatteryManager

PowerManager是Android平台中用于管理控制设备电源状态.重启.休眠状态.唤醒等,使用该API会影响到电池的待机时间,所以无非必要,一般不要使用. 在PowerManager中有几个比较重要的公共方法,具体如下: 方法goToSleep.reboot.userActivity需要用到如下权限: <uses-permission android:name="android.permission.REBOOT"/> <uses-permission andr

Android WakeLock 介绍

Wake Lock是一种锁的机制, 只要有人拿着这个锁,系统就无法进入休眠, 可以被用户态程序和内核获得. 这个锁可以是有超时的或者是没有超时的, 超时的锁会在时间过去以后自动解锁. 如果没有锁了或者超时了, 内核就 会启动休眠的那套机制来进入休眠. (一).内核维护了: 1).两个链表,active_wake_locks[WAKE_LOCK_TYPE_COUNT] active_wake_locks[0]维护的是suspend lock. active_wake_locks[1]维护的是idl

延长电池续航时间--传感器,WakeLock

一. 传感器 传感器使用方式和定位服务类似:应用向特定的传感器注册监听器,获得更新通知. private void registerWithAccelerometer(){ SensorManager sm=(SensorManager) getSystemService(Context.SENSOR_SERVICE); List<Sensor> sensors=sm.getSensorList(Sensor.TYPE_ACCELEROMETER); if(sensors!=null&

使用WakeLock使Android应用程序保持后台唤醒

使用WakeLock使Android应用程序保持后台唤醒 - Ryan's zone - 博客频道 - CSDN.NET 在使用一些产品列如微信.QQ之类的,如果有新消息来时,手机屏幕即使在锁屏状态下也会亮起并提示声音,这时用户就知道有新消息来临了.但是,一般情况下手机锁屏后,Android系统为了省电以及减少CPU消耗,在一段时间后会使系统进入休眠状态,这时,Android系统中CPU会保持在一个相对较低的功耗状态.针对前面的例子,收到新消息必定有网络请求,而网络请求是消耗CPU的操作,那么如