轉自 http://www.cnblogs.com/loulijun/archive/2012/02/09/2344681.htmlhtml
Activity其實更像一個控制單元,控制window上顯示的View內容,好比在Activity裏有一個addContentView()方法,實際上調用了window的addContentView()方法工具
/** * Add an additional content view to the activity. Added after any existing * ones in the activity -- existing views are NOT removed. * * @param view The desired content to display. * @param params Layout parameters for the view. */ public void addContentView(View view, ViewGroup.LayoutParams params) { getWindow().addContentView(view, params); initWindowDecorActionBar(); }
Activity是一個工人,它來控制Window;Window是一面顯示屏,用來顯示信息;View就是要顯示在顯示屏上的信息,這些View都是層層重疊在一塊兒(經過infalte()和addView())放到Window顯示屏上的。而LayoutInfalter就是用來生成View的一個工具,XML佈局文件就是用來生成View的原料佈局
setContentView(R.layout.main)其實就是下面內容。(註釋掉本行執行下面的代碼能夠更直觀)post
getWindow().setContentView(LayoutInflater.from(this).inflate(R.layout.main, null))this
即運行程序後,Activity會調用PhoneWindow的setContentView()來生成一個Window,而此時的setContentView就是那個最底層的View。而後經過LayoutInflater.infalte()方法加載佈局生成View對象並經過addView()方法添加到Window上,(一層一層的疊加到Window上)spa
因此,Activity其實不是顯示視圖,View纔是真正的顯示視圖code
注:一個Activity構造的時候只能初始化一個Window(PhoneWindow),另外這個PhoneWindow有一個」ViewRoot」,這個」ViewRoot」是一個View活ViewGroup,是最初始的跟視圖,而後經過addView方法將View一個個層疊到ViewRoot上,這些層疊的View最終放在Window這個載體上面htm