综述
PowerManager 类主要对当前设备的电源进行管理;通过改API的使用,我们可以显示的获得对电源的控制权,换句话说,设备电池的电量必然会收到显著的影响。通常情况下,不建议直接使用PowerManager.WakeLock
,即便是使用也要遵循最小粒度原则并且及时的释放申请的WakeLock
使用
可以通过Context.getSystemServie()
来获得PowerManager
的实例;常用的API其实是newWakeLock
,newWakeLock
用于创建PowerManager.WakeLock
对象;我们可以通过WakeLock
对象相关方法来对设备电源进行控制。常见的代码如下所示:
PowerManager pm = (PowerManager)
getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");
wl.acquire();
//..screen will stay on during this section..
wl.release();
级别
PowerManager定义了如下级别,与之对应的就是不同的电源控制全;这些级别都是互斥的,同一时刻只能使用一种
Flag | Value | CPU | Screen Keyboard |
---|---|---|---|
PARTIAL_WAKE_LOCK | On* | Off | Off |
SCREEN_DIM_WAKE_LOCK | On | Dim | Off |
SCREEN_BRIGHT_WAKE_LOCK | Bright | Off | |
FULL_WAKE_LOCK | On | Bright | Off |
在申请了PARTIAL_WAKE_LOCK 的wake lock之后,此时不论设备设置的timeout是多少,或者屏幕手动的使用power按键灭屏,CPU都会处于运行状态。项对比其他类型的wake lock而言,可以通过power按键让设备进入到休眠模式。
通常情况下,我们可以讲如下的flag同wake lock搭配使用已达到控制屏幕、控制何时休眠的目的PARTIAL_WAKE_LOCK除外
Flag Value | Description |
---|---|
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 | If 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. |
当然要想使用WakeLock
还得有权限android.permission.WAKE_LOCK