Android電源管理系統調研報告-(2)

來源:互聯網
上載者:User

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: 
一旦有請求鎖時強制開啟
Screen

keyboard 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)

2

Power.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

 

3

andriod_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 },

};

 

4

power.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)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.