1、 Activity在onCreate()方法之前調用attach()方法,在attach方法中會創建Window對象。Window對象創建時並沒有創建Decor對象。
2、 用戶在Activity中調用setContentView()方法。
3、 setContentView()調用Window的setContentView()方法。這時會檢查DecorView是否存在,如果不存在則調用installDecor()方法創建DecorView對象;之後調用generateLayout()方法把用戶自己的View添加到DecorView中;最後回調Callback的onContentChanged()方法通知用戶界面改變了。
注意事項
-
Window是一個抽象類,提供了各種窗口操作的方法,比如設置背景標題等。
- PhoneWindow是Window的唯一實現類,它裏面實現了各種添加背景主題ContentView的方法,內部通過DecorView來添加頂級視圖。
- 每一個Activity上都有一個Window,可以通過getWindow()獲取;DecorView繼承於FrameLayout,setContentView()則是添加在它裏面的@id/content裏面。
4.setContentView()裏面創建了DecorView,根據Theme/feature添加了對應的佈局文件,當setContentView()設置顯示後會回調Activity的onContentChanged()方法。