Activity完成和AMS的綁定并走到Activity生命周期的onCreate-onResume后的界面顯示過程是怎樣的?
首(shou)先分析下在界面顯示(shi)過(guo)程中主要(yao)類之間的關系。

- Window是一個抽象類,通過控制DecorView提供了一些標準的UI方案,比如背景、標題、虛擬按鍵等,而PhoneWindow是Window的唯一實現類,在Activity創建后的attach流程中創建,應用啟動顯示的內容裝載到其內部的mDecor(DecorView);
- DecorView是整個界面布局View控件樹的根節點,通過它可以遍歷訪問到整個View控件樹上的任意節點;
- WindowManager是一個接口,繼承自ViewManager接口,提供了View的基本操作方法;WindowManagerImp實現了WindowManager接口,內部通過組合方式持有WindowManagerGlobal,用來操作View;WindowManagerGlobal是一個全局單例,內部可以通過ViewRootImpl將View加至窗口中;
- ViewRootImpl是所有View的Parent,用來總體管理View的繪制以及與系統WMS窗口管理服務的IPC交互從而實現窗口的開辟;ViewRootImpl是應用進程運轉的發動機,可以看到ViewRootImpl內部包含mView(就是DecorView)、mSurface、Choregrapher,mView代表整個控件樹,mSurfacce代表畫布,應用的UI渲染會直接放到mSurface中,Choregorapher使得應用請求vsync信號,接收信號后開始渲染流程;
交互流程
- Activity.onCreate.attach階段:實例化Window(PhoneWindow),綁定WindowManager(WindowManagerImpl-WindowManagerGlobal)
- Actiivty.onCreate.setContentView階段:綁定Window(PhoneWindow)和View(DocorView)
- Activity.onResume階段一:WindowManager.addView,實例化ViewRootImpl,通過ViewRootImpl.setView綁定ViewRootImpl和DecorView
- Actiivty.onResume階段二:WindowManager.addView,綁定WindowManagerImpl、WindowManagerGlobal、DecorView、ViewRootImpl四者的關系
