SystemUI啓動流程分析

1:SystemUI服務的啓動

Android內核啓動後,會加載天字第一號(進程號1)進程init,在init進程會調用到SystemServer進程,之後該進程main方法中會調用到initAndLoop方法,在該方法中會初始化android系統需要的所有服務,SystemUI進程的服務SystemUIService也在其中加載,代碼如下:

此處爲將狀態欄服務添加至ServiceManager中,其中StatusBarManagerService爲繼承IStatusBarService.stub類,IStatusBarService中實現了registerStatusBar方法將IStatusBar對象添加至方法參數中供系統調用SystemUI應用使用。

接下來還是在initAndLoop方法中調用startServiceUI(contextF)方法來實現調用進行SystemUI中的SystemUIService服務,如下:

該方法通過包名類名啓動SystemUIService,接下來在該服務中的onCreate()做如下調用:

接着調用Application的startServicesIfNeeded(),在該方法中會遍歷所有的子服務(繼承SystemUi抽象類),調用這些服務的start()方法,如下:

其中的子服務如下:

關於狀態欄導航欄的服務是SystemBar類,調用該類的start方法後,會創建ServiceMonitor對象,並調用該類的start方法,如下:

接着在該start方法會回調給SystemBar方法的onNoService方法中去,在該方法中會調用CreateStatusBarFormConfig方法,如下:

該方法採用類加載器得到PhoneStatusBar對象,並調用其start方法,然後再該類的start方法中會調用到BaseStatusBar中的start方法,改方法會註冊狀態欄服務的回調和調用CreateAndAddWindows()方法實現狀態欄和導航欄窗口的添加,如下:

註冊狀態欄服務回調:

CreateAndAddWindows()最終加載window的代碼如下:

此處爲添加狀態欄,接下來是添加導航欄:

至此導航欄的與狀態欄添加完成,至於子view的邏輯和UI的加載下一篇文章講解。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章