转自 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