转自 http://www.cnblogs.com/loulijun/archive/2012/02/09/2344681.html

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)其实就是下面内容。(注释掉本行执行下面的代码可以更直观)

getWindow().setContentView(LayoutInflater.from(this).inflate(R.layout.main, null))

即运行程序后,Activity会调用PhoneWindow的setContentView()来生成一个Window,而此时的setContentView就是那个最底层的View。然后通过LayoutInflater.infalte()方法加载布局生成View对象并通过addView()方法添加到Window上,(一层一层的叠加到Window上)

所以,Activity其实不是显示视图,View才是真正的显示视图

注:一个Activity构造的时候只能初始化一个Window(PhoneWindow),另外这个PhoneWindow有一个”ViewRoot”,这个”ViewRoot”是一个View活ViewGroup,是最初始的跟视图,然后通过addView方法将View一个个层叠到ViewRoot上,这些层叠的View最终放在Window这个载体上面

最新文章

  1. Testng使用方法示例
  2. (旧)子数涵数·DW——图文混排页面
  3. Linux建立软连接
  4. WPF 傻瓜生成 .dbml文件,以及文件用途原理是什么
  5. Android开发之计算器(一)界面设计之activity_main布局文件
  6. Extjs4 使用store的post方法
  7. DFA和trie特里实现敏感词过滤(python和c语言)
  8. git rebase 使用
  9. 使用菜单(Menu)资源
  10. (练习题)利用构造器函数实现三个小实例——不使用String()与Array()构造器和Math对象,不使用内建的方法的方法和属性。
  11. AVL树的插入与删除
  12. [ZJOI2007] 矩阵游戏
  13. r.js合并实践 --项目中用到require.js做生产时模块开发 r.js build.js配置详解
  14. Jmeter安装web socket协议插件
  15. java遍历Map
  16. 【php】 php获取文件路径中的文件名和文件后缀方法
  17. 【JavaScript】函数
  18. EOS行为核心:解析插件chain_plugin
  19. MVC中导航菜单,选中项的高亮问题。
  20. function方法控制是否隐藏部分内容

热门文章

  1. Solr 参考资料
  2. 基于python的flask的应用实例注意事项
  3. java 根据 根节点及所有子成员 构造树tree
  4. nyoj 712 探 寻 宝 藏--最小费用最大流
  5. html不使用cache数据
  6. 再学TSQL基础--单表查询
  7. uva 10976 fractions again(水题)——yhx
  8. 边工作边刷题:70天一遍leetcode: day 79
  9. HDU 4122 Alice's mooncake shop --RMQ
  10. HDU 1878 欧拉回路