返回

View 是如何被绘制的?

Android

Android 浅析之 View 的绘制流程


Android 应用的绘制过程是一个复杂且优化的过程,涉及多个系统组件的协作。让我们从头到尾来了解 View 的绘制流程。



从用户点击 APP 开始,会经历加载启动应用、初始化 UI 布局、用户交互、事件分发等一系列过程。当需要将 View 的内容呈现到屏幕上时,View 的绘制流程就开始了。

一、View 绘制的入口在哪里?


View 的绘制入口是 performTraversals() 方法,该方法位于 ViewRootImpl 类中,ViewRootImpl 是一个私有类,它负责管理整个 View 树的绘制过程。当系统需要绘制 View 时,会调用 ViewRootImplperformTraversals() 方法。

二、View 绘制的具体步骤


performTraversals() 方法内部,会依次执行以下步骤:

  1. 测量 (measure) :首先,需要测量 View 的大小。这可以通过调用 View 类中的 measure() 方法来实现。measure() 方法会根据父 View 的大小和 View 本身的属性来计算 View 的测量结果。

  2. 布局 (layout) :测量完成后,需要将 View 布局到正确的位置。这可以通过调用 View 类中的 layout() 方法来实现。layout() 方法会根据父 View 的大小和 View 本身的测量结果来计算 View 的布局位置。

  3. 绘制 (draw) :最后,需要将 View 绘制到屏幕上。这可以通过调用 View 类中的 draw() 方法来实现。draw() 方法会根据 View 的布局位置和 View 本身的属性来绘制 View 的内容。

三、View 绘制的优化


为了提高 View 的绘制性能,Android 系统提供了一系列优化措施,包括:

  • 硬件加速 :硬件加速是指利用 GPU 来加速 View 的绘制。GPU 是专门负责图形处理的硬件,它的处理速度远高于 CPU。通过使用硬件加速,可以大大提高 View 的绘制速度。

  • SurfaceView :SurfaceView 是一个专门用于显示图形内容的 View。它可以绕过 Android 的渲染系统,直接与 GPU 通信。这可以进一步提高 View 的绘制速度。

  • OpenGL ES :OpenGL ES 是一个跨平台的图形 API,它可以用于创建 2D 和 3D 图形。通过使用 OpenGL ES,可以创建出更加复杂和逼真的图形效果。

四、View 绘制流程总结


View 的绘制流程是一个复杂且优化的过程,涉及多个系统组件的协作。通过理解 View 的绘制流程,我们可以更好地优化 View 的绘制性能,从而提高应用的整体性能。