一、Android power management应用层分析
Android提供了android.os.PowerManager类,该类用于控制设备的电源状态的切换.
该类对外有三个接口函数:
1、void goToSleep(long time);
强制设备进入Sleep状态
要注意权限问题。
2、newWakeLock(int flags, String tag);
取得相应层次的锁
flags参数说明:
PARTIAL_WAKE_LOCK: Screen off, keyboard light off
SCREEN_DIM_WAKE_LOCK: screen dim, keyboard light off
SCREEN_BRIGHT_WAKE_LOCK: screen bright, keyboard light off
FULL_WAKE_LOCK: screen bright, keyboard bright
ACQUIRE_CAUSES_WAKEUP: 一旦有请求锁时强制打开Screen和keyboard light
ON_AFTER_RELEASE: 在释放锁时reset activity timer
如果申请了partial wakelock,那么即使按Power键,系统也不会进Sleep,如Music播放时
如果申请了其它的wakelocks,按Power键,系统还是会进Sleep。
3、void userActivity(long when, boolean noChangeLights);
User activity事件发生,设备会被切换到Full on的状态,同时Reset Screen off timer.
1) 在使用以上函数的应用程序中,必须在其Manifest.xml文件中加入下面的权限:
2) 所有的锁必须成对的使用,如果申请了而没有及时释放会造成系统故障.如申请了partial
wakelock,而没有及时释放,那系统就永远进不了Sleep模式。
二、Android power management Java层分析
其主要代码文件如下:
frameworks/base/core/java/android/os/PowerManager.java
frameworks/base/services/java/com/android/server/PowerManagerService.java
frameworks/base/core/java/android/os/Power.java
其中PowerManagerService.java是核心, PowerManager.java是提供给应用层调用的,
Power.java提供底层的函数接口,与JNI层进行交互