1. 程式人生 > >Android6.0 SystemUI啟動簡析及圖示顯示重新整理

Android6.0 SystemUI啟動簡析及圖示顯示重新整理

1、Android系統啟動時,在SystemServer中會去註冊StatusBarManagerService; 2、在StatusBarManagerService中的構造方法會去config.xml中讀取Icon slot,並在StatusBarIconList集合中構造出相應長度的StatusBarIcon[]陣列和將形參slot[]賦值給mSlots[]; 3、隨著Android系統的啟動,StatusBar不斷載入;通過呼叫BaseStatuBar的start()方法,去完成StatusBar的介面顯示和初始圖示的設定; 4、BaseStatuBar的start()主要是通過兩個方法createAndAddWindows()和addIcon()方法來完成介面顯示和初始圖示設定,而這兩個方法的主要實現是在其子類PhoneStatusBar.java中實現的; 5、BaseStatuBar的start()會獲取StatusBarManagerService物件,建立StatusBarIconList和CommandQueue的物件並將其傳入到StatusBarManagerService中;在StatusBarManagerService中通過mBar(即傳入的CommandQueue物件)進行一系列的命令操作; 6、執行完BaseStatuBar的start()方法後,即回到PhoneStatusBar的start()方法中,在這個start()方法中會去構造一個PhoneStatusBarPolicy物件;主要是用來註冊廣播監聽各種狀態,如鈴聲、SIM卡等等狀態變化來更新Icon的顯示圖形,最後通過呼叫 mService.setIcon()方法來設定顯示出來; 7、而mService實質上是StatusBarManagerService的aidl呼叫,呼叫到StatusBarManagerService.java中的setIcon()方法; 8、在此方法中又會呼叫mBar.setIcon()方法去設定圖示,而在前面我們知道mBar實質上值得是CommandQueue.java的物件,即調入CommandQueue.java中的setIcon()方法;此方法通過傳送msg為OP_SET_ICON的訊息通知主執行緒Handler執行,接下來通過Callback.addIcon()進行回撥執行; 9、在CommandQueue.java的CallBack介面最終由PhoneStatusBar實現,即最終實現Icon的是在PhoneStatusBar.java的addIcon()方法內; 10、在addIcon()方法內呼叫mIconController.addSystemIcon()方法進入StatusBarIconController.java中的addSystemIcon()中執行。 至此完成StatusBar的顯示更新。