安卓待機流程分析

來源:互聯網
上載者:User

 

以下分析基於android2.2的google源碼。

開機啟動時,首先執行PhoneWindowManager.systemReady()(這之前的流程不分析)。調用KeyguardViewMediator.onSystemReady()進行待機鎖屏及解鎖邏輯。

KeyguardViewMediator是整個待機解/鎖屏業務的調度器,負責調度鎖定畫面的相關動作及查詢解鎖屏狀態,包括以下一些內容:

查詢鎖屏狀態,及當前處於鎖屏狀態還是已解鎖狀態,PhoneWindowManager持有KeyguardViewMediator的引用,當使用者觸控螢幕幕或者按下某個鍵是,PhoneWindowManager會通過KeyguardViewMediator查詢鎖屏狀態(鎖定/解鎖),進行不同的響應處理。如果處於鎖定狀態,系統輸入事件會受到限制。

響應電源事件(黑/亮屏)。判斷鎖定畫面應該處於什麼狀態(顯示或者重設)。手機黑屏後,鎖定畫面馬上就會顯示出來,以便下一次亮屏後,馬上就能顯示鎖定畫面,而不會出現閃爍或延時。

其他應用程式或者服務也可以請求禁止鎖屏(通過調用KeyguardViewMediator的setKeyguardEnabled(boolean)方法)。例如接聽來電介面。

KeyguardViewMediator類在WindowManagerPolicy(在手機系統中是PhoneWindowManager執行個體)初始化時被建立,並運行在它的線程上,鎖屏的UI介面也是在這個線程上建立及顯示的。KeyguardViewMediator類提供的狀態查詢api可以被諸如android.view.WindowManager、com.android.server.InputManager等其它線程調用,所以,KeyguardViewMediator類上的這些api方法都是線程同步的(synchronized)。

KeyguardViewMediator可以進行的調度操作包括:
      1) 點亮螢幕pokeWakelock();
     2) 報告鎖屏許可權驗證是否成功keyguardDone(boolean);
     3) 響應SIM卡狀態變化並對鎖定畫面做相應的調整onSimStateChanged()。
      4) 調度待機鎖屏UI介面的管理,包括顯示handleShow ()、隱藏handleHide ()、重設handleReset ()、點亮螢幕handleWakeWhenReady()等,KeyguardViewMediator實現這部分調度是通過持有一個KeyguardViewManager來實現的。

KeyguardUpdateMonitor是所有會影響整個待機解/鎖屏業務的事件的監控器。(除了作為監控器,它還發揮著類似內容相關的作用,也許我們應該把這個類命名為(KeyguardContext)。它監控諸如時間改變、電池狀態改變、時區改變、SIM卡狀態變化、電話狀態變化、電話訊號變化等事件。它是一個觀察者模式的被觀察對象。觀察者通過調用KeyguardUpdateMonitor的registerInfoCallback(InfoCallback)和registerSimStateCallback(SimStateCallback)方法進行註冊,觀察自己感興趣的變化。KeyguardUpdateMonitor的觀察者包括KeyguardViewMediator、LockScreen、PatternUnlockScreen、AccountUnlockScreen、PasswordUnlockScreen、SimUnlockScreen等。觀察者通過調用KeyguardUpdateMonitor的removeCallback(Object)取消觀察。

KeyguardViewManager負責管理待機屏UI介面的建立、顯示、隱藏、重設以及通過一個回調KeyguardViewCallback通知調度器KeyguardViewMediator進行相關的調度

LockPatternKeyguardView(KeyguardViewBase)是所有鎖屏和解鎖UI介面的宿主。它有2個模式Mode. LockScreen和Mode. UnlockScreen。它負責根據當前上下文環境切換當前應該顯示的待機屏。它提供一個回調給當前顯示的待機屏並處理其回調,如果回調動作是自己處理不了的,則繼續報告給KeyguardViewMediator進行處理。
鎖定畫面就是LockScreen;解鎖介面包括SIM卡解鎖SimUnlockScreen、圖案解鎖PatternUnlockScreen、密碼解鎖PasswordUnlockScreen、帳號解鎖AccountUnlockScreen

     解鎖成功後,鎖屏流程轉到KeyguardViewMediator的keyguardDone(boolean, boolean) 進行後續的流程(如轉到Launcher案頭)。

相關文章

聯繫我們

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