Activity源碼簡要分析總結
摘自參考書籍,只列一下結論:
1. Activity的頂層View是DecorView,而我們在onCreate()方法中通過setContentView()設置的View只不過是這個DecorView中的一部分。
DecorView是一個FrameLayout。
2. Activity和UI 有關,它包含一個Window(真實類型是PhoneWindow)和一個WindowManager(真實類型是LocalWindowManager)對象。這兩個對象將控制整個Activity的顯示。
3. LocalWindowManager使用了WindowManagerImpl作為最終的處理對象(Proxy模式),這個WindowManagerImpl中有一個ViewRoot對象。
4. ViewRoot實現了ViewParent接口,它有兩個重要的成員變量,一個是mView,它指向Activity頂層UI單元的DecorView,另外一個是mSurface,這個Surface包含了一個Canvas(畫布)。
除此之外,ViewRoot還通過Binder系統和WindowManagerService進行了跨進程交互。
5.ViewRoot能處理Handler的消息,Activity的顯示就是由ViewRoot在它的performTraversals()方法中完成的。
6. 整個Activity的繪圖流程就是從mSurface中lock()一塊Canvas,然后交給mView去繪制,最后unlockCanvasAndPost()釋放這塊Canvas。
參考資料
《深入理解Android 卷I》 鄧凡平 著