android系統一段時間沒有操作,
屏幕(screen)將從高亮(bright)變為暗淡(dim),如果再過段時間還是沒有操作,屏幕(screen)從暗淡(dim)變為關閉(off).這時,系統將進入休眠.
而對於某些需要保持系統喚醒甚至屏幕喚醒的應用(比如視頻播放器和音樂播放器)來說,就必須要有一個機制,使得系統不進入休眠狀態,設置保持屏幕亮屏狀態.
wakelock即用來實現以上目的
先上網上偷來的一副圖,說一下android系統的整個電源管理流程圖
接下來對每一個模塊具體分析:
powermanager
對應文件是android/frameworks/base/core/java/android/os/PowerManager.java
在Android中應用程序並不是直接同PowerManagerService交互的,而是通過PowerManager間接地與PowerManagerService打交道。
此文件定義了一個powermanager類.
主要實現了
1,wakelock的申請與釋放
public WakeLock newWakeLock(int flags, String tag)
2,系統延時進入休眠
public void userActivity(long when, boolean noChangeLights)
3,系統強制休眠
public void goToSleep(long time)
4,屏幕亮度設置
public void setBacklightBrightness(int brightness)
5,屏幕狀態查詢
public boolean isScreenOn()
6,系統重啟
public void reboot(String reason)
細節
wakelock的申請與釋放
{@samplecode
*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();
一共有如下幾個flag來進行不一樣的喚醒方式.可以根據需要設置
Flag Value CPU Screen Keyboard
PARTIAL_WAKE_LOCK On* can-off Off
SCREEN_DIM_WAKE_LOCK On Dim Off
PROXIMITY_SCREEN_OFF_WAKE_LOCK on 距離傳感器時關閉 off
SCREEN_BRIGHT_WAKE_LOCK On Bright Off
FULL_WAKE_LOCK On Bright Bright
ACQUIRE_CAUSES_WAKEUP 確保wakelock,主要用於視頻播放器
ON_AFTER_RELEASE = 0x20000000 release后倒計時,關閉屏幕
...
userActivity的作用:
使系統從其他狀態進入全部打開狀態,比如從暗屏(dim)切換到亮屏,並重置倒計時計數器
(待續)