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里的代码然后进行说明。

private void 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();
} } private void 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的操作步骤                                     

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);通过Context.getSystemService().方法获取PowerManager实例。

然后通过PowerManager的newWakeLock((int flags,String
tag)来生成WakeLock实例。int Flags指示要获取哪种WakeLock,不同的Lock对cpu 、屏幕、键盘灯有不同影响。

获取WakeLock实例后通过acquire()获取相应的锁,然后进行其他业务逻辑的操作,最后使用release()释放

int flags                                                                                    

PARTIAL_WAKE_LOCK:       保持CPU 运转,屏幕和键盘灯可以关闭。
SCREEN_DIM_WAKE_LOCK: 保持CPU 运转,保持屏幕显示,但可以变暗,允许键盘灯关闭。
SCREEN_BRIGHT_WAKE_LOCK:保持CPU 运转,允许保持屏幕高亮显示,允许键盘灯关闭。
FULL_WAKE_LOCK: 保持CPU 运转,保持屏幕和键盘灯都高亮显示。
ACQUIRE_CAUSES_WAKEUP: 当获取锁后,立刻亮屏,典型地使用在通知中,以让用户立刻查看。
ON_AFTER_RELEASE: 在释放锁(release())后,手机屏幕仍会继续亮一会儿。

权限                                                                                            

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

<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.DEVICE_POWER"/>

我是天王盖地虎的分割线                                                                 

参考:http://blog.csdn.net/fm9333/article/details/17762349

Android -- PowerManager和PowerManager.WakeLock的更多相关文章

  1. PowerManager和PowerManager.WakeLock详解

    最近在做项目过程中,有一个LocalPush的需求,需要保持屏幕点亮一段时间,并且在这个时间里,启动Service来执行请求服务器的操作,拿到热点的数据.所以,就找了一下相关的android开源项目. ...

  2. Android 的 AlarmManager 和 wakeLock联合使用

    http://stackoverflow.com/questions/6864712/android-alarmmanager-not-waking-phone-up 主要说的是,对于android ...

  3. PowerManager和WakeLock的操作步骤

    ①  PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);通过 Context.getSystemServ ...

  4. PowerManager.WakeLock

    PowerManager.WakeLock PowerManager.WakerLock是我分析Standup Timer源代码时发现的一个小知识点,Standup Timer 用WakeLock保证 ...

  5. Android PowerManager电源管理(Android N )

    ./frameworks/base/core/java/android/os/PowerManager.java该类提供给Application访问电源相关接口. 它的内部类WakeLock是定义的唤 ...

  6. Android之PowerManager&BatteryManager

    PowerManager是Android平台中用于管理控制设备电源状态.重启.休眠状态.唤醒等,使用该API会影响到电池的待机时间,所以无非必要,一般不要使用. 在PowerManager中有几个比较 ...

  7. 【转】PowerManager 与 WakeLock

    PowerManager 与 WakeLock PowerManager 用来控制设备的电源状态. 而PowerManager.WakeLock 也称作唤醒锁, 是一种保持 CPU 运转防止设备休眠的 ...

  8. android之WakeLock机制浅析

    转自:http://blog.sina.com.cn/s/blog_4ad7c2540101n2k2.html 应用程序耗电的实质,是所启用的硬件在消耗电量.  手机的耗电单元 CPU: 应用处理器( ...

  9. Android wakelock机制

      Wake Lock是一种锁的机制, 只要有人拿着这个锁,系统就无法进入休眠,可以被用户态程序和内核获得. 这个锁可以是有超时的或者是没有超时的,超时的锁会在时间过去以后自动解锁. 如果没有锁了或者 ...

随机推荐

  1. 在Apache下发布ASP.NET程序

    为什么要在apache下发布ASP.NET,看这篇文章您一定有自己的原因. 我是因为XP系统里面同时装IIS 和 AppServer会有问题. 步骤: 1.环境搭建,这个不废话,我安装的是.NET2. ...

  2. LLVM language 参考手册(译)(3)

    可见性模式(Visibility Styles) 所有全局变量和函数具有以下的可见性模式之一: “default” - Default style 在那些使用ELF object file格式的平台( ...

  3. IOS懒人笔记应用源码

    这个源码是懒人笔记应用源码,也是一个已经上线的apple应用商店的应用,懒人笔记iOS客户端源码,支持语音识别,即将语音转化成文本文字,所用语音识别类库为讯飞语音类库. 懒人笔记是一款为懒人设计的笔记 ...

  4. C puzzles详解【1-5题】

    第一题 #include<stdio.h> #define TOTAL_ELEMENTS (sizeof(array) / sizeof(array[0])) ,,,,,,}; int m ...

  5. 结合Git实现Mysql差异备份,可用于生产环境

    埋头苦干多年一直没写过文章,今天突发狂想,为LNMP阵营贡献一些力量.就从平时工作过程中的心得和一些技巧分享出来.今天就猿们最熟悉的Mysql开始宅鸟的开篇博客文章.欢迎猿们拍砖.转载. 注意:宅鸟的 ...

  6. C#关于一个程序,只可以有一种实例的方法

    方法一:使用线程互斥变量. 通过定义互斥变量来判断是否已运行实例.把program.cs文件里的Main()函数改为如下代码: 说明:程序中通过语句 System.Threading.Mutex ru ...

  7. Java ZK image 處理

    自己上 ZK 官方論壇提問.別人的回答.自己解決問題後上傳的問題紀錄: http://forum.zkoss.org/question/101152/how-do-i-binding-image-fi ...

  8. 当数据0跟if判断冲突的时候

    我是很无奈的,以后都要2,3,4,5这样去标志状态: 分配状态:<select name="is_send" > <option selected="s ...

  9. 透过c的编程原则,来规范自己现在的一些编程习惯

    1.合理的使用注释 注释为:/*…………*/ 注释有以下几种情况: 1) 版本.版权声明. 2) 函数接口说明. 3) 重要的代码或者段落显示. 注释注意: 1) 注释是对代码的解释,不是对文档.注释 ...

  10. mysql 截取字符

    $where="(left(`type_id`,1)=1"; 返回 type_id 字段 从左边开始长度为1个字符 LEFT(str,len)返回字符串str的最左面len个字符. ...