Android PowerManagerService分析__android

來源:互聯網
上載者:User
Android 的電源管理也是很重要的一部分。比如在待機的時候關掉不用的裝置,timeout之後的螢幕和鍵盤背光的關閉,使用者操作的時候該開啟多少裝置等等,這些都直接關係到產品的待機時間,以及使用者體驗。在網上可以找到一篇到處轉載的關於power management的文章http://blog.csdn.net/hzdysymbol/article/details/4004791,不過也是從上到下講了下,比較注重底層如何應用。我這篇文章就只說說framework層的分析,以及如何根據需求來定製。 framework層主要有這兩個檔案: frameworks\base\core\java\android\os\PowerManager.java frameworks\base\services\java\com\android\server \PowerManagerService.java 其中PowerManager.java是提供給應用程式層調用的,最終的核心還是在PowerManagerService.java。這個類的作用就是提供PowerManager的功能,以及整個電源管理狀態機器的運行。裡面函數和類比較多,就從對外和對內分兩塊來說。先說對外,PowerManagerService如何來進行電源管理,那就要有外來事件的時候去通知它,這個主要是在frameworks\base \services\java\com\android\server\WindowManagerService.java裡面。 WindowManagerService會把使用者的點擊螢幕,按鍵等作為user activity事件來調用userActivity函數,PowerManagerService就會在userActivity裡面判斷事件類型作出反映,是點亮螢幕提供操作,還是完全不理會,或者只亮一下就關掉。供WindowManagerService調用的方法還有gotoSleep和其他一些擷取電源狀態的函數比如screenIsOn等等。在說對內,作為對外介面的userActivity方法主要是通過setPowerState來完成功能。把要設定的電源狀態比如開關螢幕背光什麼的作為參數調用setPowerState,setPowerState先判斷下所要的狀態能不能完成,比如要點亮螢幕的話但是現在螢幕被lock了那就不能亮了,否則就可以調用Power.setScreenState(true)來透過jni跑到driver裡面去點亮螢幕了。而電源的狀態迴圈則主要是通過Handler來實現的。PowerManagerService在init裡面會啟動一個HandlerThread一個後台訊息迴圈來提供任務的延遲發送,就可以使用Handler來在定製延遲某一任務的執行時間,從而實現狀態機器的迴圈。比如timeout,一段時間之後無操作要讓螢幕變暗,然後關閉,反映在代碼裡如下: userActivity裡面在調用setPowerState之後會用setTimeoutLocked來設定timeout。然後在 setTimeoutLocked裡面會根據當前的狀態來計算下一個狀態以及時間,判斷完再調用 mHandler.postAtTime(mTimeoutTask, when)來post一個TimeoutTask。這樣在when毫秒後就會執行TimeoutTask。在TimeoutTask裡面則根據設定的狀態來調用setPowerState來改變電源狀態,然後再設定新的狀態,比如現在是把螢幕從亮改暗了,那就再用 setTimeoutLocked(now, SCREEN_OFF)來等下把螢幕完全關掉。如果這次已經是把螢幕關了,那這輪的timeout狀態迴圈就算是結束了。如果要定製的話,比如需求是在timeout螢幕關掉之後還要再關掉一些外圍裝置等等,那就在TimeoutTask裡面把螢幕關掉之後再加上關閉其他裝置的代碼就好了。即使新的狀態需求完全和原來的不一樣,用Handler應該也不難。邏輯理清了把代碼擺在合適的地方就好了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.