Activity,view,window关系形象理解

来源:互联网 发布:截取在线视频软件 编辑:程序博客网 时间:2024/04/29 09:53

当我们运行程序的时候,有一个setContentView()方法,Activity其实不是显示视图(直观上感觉是它),实际上Activity调用了PhoneWindow的setContentView()方法,然后加载视图,将视图放到这个Window上,而Activity其实构造的时候初始化的是Window(PhoneWindow),Activity其实是个控制单元,即可视的人机交互界面。

打个比喻:

Activity是一个工人,它来控制Window;Window是一面显示屏,用来显示信息;View就是要显示在显示屏上的信息,这些View都是层层重叠在一起(通过infalte()和addView())放到Window显示屏上的。而LayoutInfalter就是用来生成View的一个工具,XML布局文件就是用来生成View的原料


你知道MVC模式吧?M Model, V View, C Control,在Android里面View就是 View 类, Control之一就是Activity 类了

首先View不代表一个屏幕,View可以代表一个按钮(ButtonView),一行字(TextView),一个文本框(EditText),也可以代表一个不可见的容器(ViewGroup的子类们),装了一打按钮之类的东西,ViewGroup可以它里面东西的排列显示方式,横着、竖着、可以滚动的,等等,随心所欲。ViewGroup里面可以套ViewGroup,就像俄罗斯套娃,最外面那个才充满整个屏幕。

Acitivity当然代表一个屏幕,但和view的作用不同。看View,不说别的,就onDraw()方法,Activity有吗?Activity连个带draw字的方法都没有,所以它不直接负责显示工作。你看Activity的方法,大部分都处理这些事的,比如触摸、按件、呼出菜单、保存状态、暂停、继续,都是处理程序的。如果你不给Acitvity里面“setContentView",它就没有东西显示。所以Activity就像是个后台打杂的,和前台唱戏的View是互相配合的关系。


这么说吧,activity就是html标签,是整个html代码的根,所有的界面组成控件都必须放在activity里面。

view就是div标签,是一个能够盛放别的控件的容器。



0 0