Android电源管理系统调研报告-(2)

来源:互联网 发布:python pdf下载 编辑:程序博客网 时间:2024/04/30 05:27

1)、PowerManager.java

该文件定义了一个PowerManager类供其它文件使用,该类嵌套了一个nest class

public class WakeLock,该nest class有如下方法:

public void setReferenceCounted(boolean value)

public void acquire()

public void acquire(long timeout)

public void release()

public void release(int flags)

public boolean isHeld()

public String toString()

@Override

        protected void finalize() throws Throwable

 

nest class的构造方法为:

 WakeLock(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

上面4种是互斥的,即只能指定其中之一,但可以与下面两种flag不是互斥的:

ACQUIRE_CAUSES_WAKEUP: 一旦有请求锁时强制打开Screenkeyboard light

ON_AFTER_RELEASE: 在释放锁时reset activity timer

 

 

除了这个内部类,powermanager类定义了如下方法:

public WakeLock newWakeLock(int flags, String tag)

              //该方法return一个nest class的一个对象。而我们看到,nest class实际上完成了WakeLock的申请与释放

public void userActivity(long when, boolean noChangeLights)

public void goToSleep(long time)

public void setBacklightBrightness(int brightness)

public int getSupportedWakeLockFlags()

public boolean isScreenOn()

 

该类的构造方法有两个:

private PowerManager()     

public PowerManager(IPowerManager service, Handler handler)

2Power.java

PowerManagerSerivive.java中调用了一些本地方法,该文件作为这些方法的java层与jni的中间层,声明了本地接口。

public static native void acquireWakeLock(int lock, String id);

    public static native void releaseWakeLock(String id);

    public static native int setScreenState(boolean on);

    public static native int setLastUserActivityTimeout(long ms);

    @Deprecated

    public static native void shutdown();

    public static void reboot(String reason) throws IOException

 

3andriod_ow_Power.cpp

该文件编写了本地实现方法,从本地方法列表可以知道该本地方法与power.c是密切相关的:

static JNINativeMethod method_table[] = {

    { "acquireWakeLock", "(ILjava/lang/String;)V", (void*)acquireWakeLock },

    { "releaseWakeLock", "(Ljava/lang/String;)V", (void*)releaseWakeLock },

    { "setLastUserActivityTimeout", "(J)I", (void*)setLastUserActivityTimeout },

    { "setScreenState", "(Z)I", (void*)setScreenState },

    { "shutdown", "()V", (void*)android_os_Power_shutdown },

    { "rebootNative", "(Ljava/lang/String;)V", (void*)android_os_Power_reboot },

};

 

4power.c

该文件作为Android系统的最底层,与Linux内核的power manager交互。

static int64_t systemTime()

static int open_file_descriptors(const char * const paths[])

static inline void initialize_fds(void)

int acquire_wake_lock(int lock, const char* id)

int set_last_user_activity_timeout(int64_t delay)

int set_screen_state(int on)

原创粉丝点击