- 前言
谈到UI界面架构,我其实想到的就是一个Activity,然后再到布局,比如常用的LinearLayout(线性布局)、RelativeLayout(相对布局)等,再具体到每一个View构成一个界面。这样显得很不专业,哈哈。
- 正文
UI界面架构图
PhoneWindow是安卓系统中最基本的窗口系统,每个Activity都会创建一个PhoneWindow,它是activity和view之间交互的接口,其中DecorView被设置为整个应用窗口的根View,DecorView作为窗口界面的顶层视图,封装了一些窗口操作的基本方法。将要显示的具体内容呈现在PhoneWindow上,我们的View的监听事件都是由WindowMangerService来进行接收,并且通过Activity的对象来回调相应的onClickListener。
- 绘制流程
启动一个程序先运行主Activity,Android系统会根据activity的布局来对它进行绘制。绘制从根视图ViewRoot的performTraversals()方法开始,从上到下遍历整个视图树,每个View负责控制自己,而ViewGroup还要负责通知自己的子View进行绘制。
视图操作过程分为三个步骤,测量measure,布局layout,绘制draw
measure用来测量View的实际大小 ,页面的测量流程从performMeasure开始,具体分发给viewgroup,由viewgroup在他的measureChild方法中传递给子View,ViewGroup通过遍历自身所有的子View,并逐个调用子View的Measure方法实现测量操作。View的Measure方法,最终的测量是通过回调onMeasure方法实现的,这个通常由View的特定子类自己实现,可以通过重写这个方法实现自定义View
layout的过程是确定View在父容器中的布局位置,他是父容器获取子View的位置参数后,调用View的layout方法并将位置传入参数实现的。
Draw操作用来实现将控件绘制出来,绘制的流程从performDraw开始,最终调用到每个View的draw方法绘制每个View。