Android UI 渲染基本概念

本文介绍Android UI渲染基本概念。

概念

Android Window 概念

1. Activity

Android中对用户提供功能的接口。官方对Activity的介绍:移动应用体验与桌面体验的不同之处在于,用户与应用的互动并不总是在同一位置开始,而是经常以不确定的方式开始。例如,如果您从主屏幕打开电子邮件应用,可能会看到电子邮件列表,如果您通过社交媒体应用启动电子邮件应用,则可能会直接进入电子邮件应用的邮件撰写界面。Activity 类的目的就是促进这种范式的实现。当一个应用调用另一个应用时,调用方应用会调用另一个应用中的 Activity,而不是整个应用。通过这种方式,Activity 充当了应用与用户互动的入口点。

2. PhoneWindow

每个Activity都有一个Window实例,其类型为PhoneWindow。PhoneWindow持有一个Window Manager实例用于管理布局与DecorView。

3. DecorView

DecorView继承自FrameLayout,DecorView包含两个sub-View:TitleView 与 ContentView 。开发者在ActivityOnCreate方法中调用的SetContentView方法,就是将View设置到 ContentView 。

4. WindowManager

public interface WindowManager extends ViewManager {
    Display getDefaultDisplay();

    void removeViewImmediate(View var1);
    ......//ellipsis
}

WindowsManger 继承自ViewManager,因此WindowsView可以增、删、更新View。 WindowsManger 在Activity执行attach()方法时候被创建,attach()方法在onCreate()之前被创建。

5. View

界面元素抽象容器。

Surface 概念

1. Surface

Surface 是一块缓冲区,生产方(Windows体系)将需要绘制到屏幕的数据写入缓冲区,消费方( SurfaceFlinger )负责读取缓冲区数据,通过 HWC 最终绘制到屏幕上。

2. SurfaceFinger

消费 Surface 缓冲区数据,交给HWC绘制到屏幕上。

3. HWC (Hardware Compositor)

HWC 在Android中是一个HAL定义,硬件实现由具体厂家提供。HWC最终负责图形上屏显示。 同时HWC还负责产生VSYNC信号。

4. Canvas

将 Surface 缓冲区封装为画布,提供给应用程序绘图。典型的Android UI绘图使用 Skia 库,那么Skia就是画笔。应用程序通过Skia画笔,在Canvas画布上画各种形状,最终提交到缓冲区,由SurfaceFlinger响应VSYNC信号,在屏幕上显示。

UI 渲染流程

Reference

  1. Android 之如何优化 UI 渲染(上)
  2. Android window mechanism
  3. Understanding Canvas and Surface concepts
  4. Android UI System
  5. Activity 简介
  6. Surface 和 SurfaceHolder
  7. 实现硬件混合渲染器 HAL

关注公众号获得更多云最佳实践