U I 框架基本概念: Activity 基本的页面单元,Activity包含一个Window,window 上可以绘制各种view View 最基本的UI 组件,表示屏幕上的一个矩形区域; Window 表示顶层窗口,管理界面的显示和事件的响应;每个Activity 均会创建一个 PhoneWindow 对象,是Activity和整个View 系统交互的接口。 PhoneWindow 该类继承于 Window 类,同时,PhoneWindow 类内部包含了一个DecorView 对象。简而言之,PhoneWindow 是把一个FrameLayout 进行了一定的包装,并提供了一组通用的窗口操作接口。 DecorView Window 中 View 的RootView,设置窗口属性;该类是一个FrameLayout 的子类,并且是PhoneWindow 中的一个内部类。Decor 的英文是Decoration,即“修饰”的意思,DecorView 就是对普通的FrameLayout 进行了一定的修饰,比如添加一个通用的Title bar,并响应特定的按键消息等。 ViewRoot 并不是一个View 类型,而是一个Handler。 A. 向 DecorView 分发收到的用户发起的event 事件,如按键,触屏,轨迹球等事件; B. 与 WindowManagerService 交互,完成整个Activity的GUI 的绘制 关系图 View树的绘图流程 整个View 树的绘图流程是在ViewRoot.java 类的performTraversals()函数展开的,该函数做的执行过程可简单概况为: 根据之前设置的状态,判断是否需要重新计算视图大小(measure)、是否重新需要安置视图的位置(layout)、以及是否需要重绘 (draw),其框架过程如下 : View 树 的 结 构 , 对 每 个 具 体 View 对 象 的 操 作 , 其 实 就 是 个 递 归 的 实 现 。 mesarue():为 整 个 View 树 计 算 实 际 的 大 小 , 即 设 置 实 际 的 高 (对 应 属性 :mMeasuredHeight)和 宽 (对 应 属 性 : mMeasureWidth), 每 个View 的 控 件 的 实 际 宽 高 都 是 由 父 视 图 和 本 身 视 图 决 定 的 。 layout:根 据 子 视 图 的 大 小 以 及 布 局 参 数 将 View 树 放 到 合 适 的 位 置 上 draw():ViewRoot 对 象 的 performTraversals()方 法 调 用 draw()方 法 发 起 绘制 该 View 树 , 值 得 注 意 的 是 每 次 发 起 绘 图 时 , 并 不 会 重 新 绘 制 每 个View 树 的 视 图 , 而 只 会 重 新 绘 制 那 些 “需要...