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

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)