本文介绍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 。开发者在Activity
的OnCreate
方法中调用的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信号,在屏幕上显示。