android setContentView處理流程

1、 Activity在onCreate()方法之前調用attach()方法,在attach方法中會創建Window對象。Window對象創建時並沒有創建Decor對象。

2、 用戶在Activity中調用setContentView()方法。

3、 setContentView()調用Window的setContentView()方法。這時會檢查DecorView是否存在,如果不存在則調用installDecor()方法創建DecorView對象;之後調用generateLayout()方法把用戶自己的View添加到DecorView中;最後回調Callback的onContentChanged()方法通知用戶界面改變了。

注意事項

  1. Window是一個抽象類,提供了各種窗口操作的方法,比如設置背景標題等。

  2. PhoneWindow是Window的唯一實現類,它裏面實現了各種添加背景主題ContentView的方法,內部通過DecorView來添加頂級視圖。
  3. 每一個Activity上都有一個Window,可以通過getWindow()獲取;DecorView繼承於FrameLayout,setContentView()則是添加在它裏面的@id/content裏面。

4.setContentView()裏面創建了DecorView,根據Theme/feature添加了對應的佈局文件,當setContentView()設置顯示後會回調Activity的onContentChanged()方法。

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