Android電源管理

jackie_gnu發表於2011-07-21

 copy from: StevGuo系列文章翻譯之Android電源管理

上圖展示了Android電源管理的整體設計框架。Android實現了一個非常簡單的電源管理機制,目前,它只支援screen on/off,screen backlight on/off,keyboard backlight on/off,button backlight on/off和調整screen亮度。不支援sleep,standby等更加充分利用CPU能力的模式。電源管理模組通過三個途徑接收輸入:RPC呼叫,電池狀態改變事件和電源設定改變事件。與其它模組通訊時,使用Intent廣播或者直接API呼叫。也提供了重啟和關機服務。當電池電量低於某個值時,會自動關閉裝置。當沒有使用者事件時,電源模組會自動使螢幕dim或者off,狀態轉換如下圖: PowerManagerService.java是核心服務。它呼叫Power.java做具體的工作。PowerManager.java是通過RPC訪問PowerManagerService.java的代理。Power.java與JNI通訊。Android_os_Power.cpp是對Power.java中JNI介面的實現它呼叫Power.c做具體的工作。Power.c通過讀寫下面的檔案控制著電源裝置驅動: "/sys/android_power/acquire_partial_wake_lock", "/sys/android_power/acquire_full_wake_lock", "/sys/android_power/release_wake_lock", "/sys/android_power/request_state" "/sys/android_power/auto_off_timeout", "/sys/class/leds/lcd-backlight/brightness", "/sys/class/leds/button-backlight/brightness", "/sys/class/leds/keyboard-backlight/brightness" BatteryService.java把自己註冊為一個對路徑”/sys/class/power_supply”的UEvent監視器,如果這個路徑中的資訊有改變的話,它通過JNI通過java層次的API傳送ACTION_BATTERY_CHANGED廣播來把最新的狀態資訊傳遞出去。 Com_android_server_BatteryService.cpp是BatteryService.java中JNI的本地實現。它通過下面的檔案獲得當前電池狀態: "/sys/class/power_supply/ac/online" "/sys/class/power_supply/usb/online" "/sys/class/power_supply/battery/status" "/sys/class/power_supply/battery/health" "/sys/class/power_supply/battery/present" "/sys/class/power_supply/battery/capacity" "/sys/class/power_supply/battery/batt_vol" "/sys/class/power_supply/battery/batt_temp" "/sys/class/power_supply/battery/technology" 想在程式當中呼叫電源模組的話,使用下面的程式碼: PowerManager pm = (PowerManager)mContext.getSystemService(Context.POWER_SERVICE); PowerManager.WakeLock wl = pm.newWakeLock( PowerManager.SCREEN_DIM_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE, TAG); wl.acquire(); // ... wl.release();

 

相關文章