android休眠喚醒流程2


android系統一段時間沒有操作,
    屏幕(screen)將從高亮(bright)變為暗淡(dim),如果再過段時間還是沒有操作,屏幕(screen)從暗淡(dim)變為關閉(off).這時,系統將進入休眠.
    而對於某些需要保持系統喚醒甚至屏幕喚醒的應用(比如視頻播放器和音樂播放器)來說,就必須要有一個機制,使得系統不進入休眠狀態,設置保持屏幕亮屏狀態.
    wakelock即用來實現以上目的

先上網上偷來的一副圖,說一下android系統的整個電源管理流程圖

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)切換到亮屏,並重置倒計時計數器
   

(待續)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM