• 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

  • 相关阅读:
    Github 简明教程--GitHub这么火,测试员你不学学吗?
    IT行业,尤其是软件测试,怎么才能月薪突破2万?
    linux 下cmake 编译 ,调用,调试 poco 1.6.0 小记
    ffmpeg(2.6) rockplayer android 下编译 小记.
    完成端口
    C++四种强制转换
    方法区(Method Area)基础知识
    逃逸分析
    堆空间参数设置小结
    堆中的线程私有缓存区域TLAB(Thread Local Allocation Buffer)
  • 原文地址:https://www.cnblogs.com/yydcdut/p/3885860.html
Copyright © 2020-2023  润新知