05.Android程序UI框架
目录介绍
- 01.应用程序UI架构
- 1.1 程序UI框架介绍
- 1.2 程序UI总体框架
- 02.窗口(Window)的结构
- 2.1 Window结构介绍
- 2.2 Activity与上下文
- 2.3 Window虚拟根View
- 2.4 窗口绘图表面
- 2.5 窗口会话Session
- 03.UI的绘制过程
- 3.1 UI的绘制流程
- 3.2 软件渲染过程
- 3.3 硬件渲染过程
- 04.UI的绘制时机
- 4.1 UI的绘制时机
- 4.2 系统的VSync实现
01.应用程序UI架构
1.1 程序UI框架介绍
- Android系统采用一种称为Surface的UI架构为应用程序提供用户界面。
- 在Android应用程序中,每一个Activity组件都关联有一个或者若干个窗口,每一个窗口都对应有一个Surface。有了这个Surface之后,应用程序就可以在上面渲染窗口的UI。
- 最终这些已经绘制好了的Surface都会被统一提交给Surface管理服务SurfaceFlinger进行合成,最后显示在屏幕上面。
- WindowManagerService服务
- 在Android应用程序UI架构中,还有一个重要的服务WindowManagerService,它负责统一管理协调系统中的所有窗口,例如管理窗口的大小、位置、打开和关闭等。
1.2 程序UI总体框架
- 程序UI总体框架如下所示
image
02.窗口(Window)的结构
2.1 Window结构介绍
- Window结构如下所示
- ViewRootImpl是一个虚拟根View,用来控制窗口的渲染,以及用来与WindowManagerService、SurfaceFlinger通信
- DecorView是窗口的真正根View
- ContentView描述窗口的主题风格
image
2.2 Activity与上下文
- Activity/Window的上下文
image
2.3 Window虚拟根View
- Window的虚拟根View -- ViewRootImpl
- ViewRootImpl是在WindowManagerGlobal.addView()时创建的
image
2.4 窗口绘图表面
- 窗口绘图表面 -- Surface
image
2.5 窗口会话Session
- 窗口会话Session
image
03.UI的绘制过程
3.1 UI的绘制流程
- UI绘制流程
image
3.2 软件渲染过程
- 软件渲染过程
image
3.3 硬件渲染过程
- 硬件渲染过程
image
04.UI的绘制时机
4.1 UI的绘制时机
- Android应用程序UI的绘制时机 – Without Vsync -- Jank
image
- Android应用程序UI的绘制时机 – With VSync
image
- Android应用程序UI的绘制时机 – With Vsync and Double Buffering
image
- Android应用程序UI的绘制时机 – With Vsync and Triple Buffering
image
4.2 系统的VSync实现
- SurfaceFlinger内部维护有一个EventThread,用来监控显卡的VSync事件
- Android应用程序通过注册一个DisplayEventReceiver来接收SurfaceFlinger的VSync事件
- Android应用程序接收到重绘UI请求,通过前面注册的DisplayEventReceiver向SurfaceFlinger请求在下一个VSync事件到来时产生一个VSync通知
- Android应用程序获得VSync通知的时候,才会真正执行重绘UI的请求