Android渲染机制
一、Android渲染机制
在Android系统中,渲染机制是确保用户界面流畅和响应迅速的关键环节,它涉及到从应用层生成UI数据到最终显示在屏幕上的整个过程,本文将详细解析Android渲染机制的核心组件和流程,包括Vsync信号协调、SurfaceFlinger工作机制、以及应用程序的基本架构。
二、Vsync信号与渲染同步
Vsync信号的重要性
Vsync(Vertical Synchronization)信号是Android系统用于协调应用和SurfaceFlinger完成UI渲染和显示的重要机制,它的主要目的是避免Tearing现象,即屏幕显示内容不完整的情况。
Vsync-offset引入原因
在Android系统中,Vsync信号有两个消费者:App和SurfaceFlinger,为了提升“跟手性”(降低输入响应延迟),这两个消费者接收Vsync信号时会有一个时间差,称为vsync-offset,通过合理规划App和SurfaceFlinger接收Vsync信号的时机,可以有效降低延迟,提高用户体验。
Vsync信号的分发
EventControlThread:控制硬件Vsync的开关。
DispSyncThread:软件产生Vsync的线程。
SF EventThread:SurfaceFlinger接收Vsync信号用于渲染。
App EventThread:接收Vsync信号并上报给App进程,开始画图。
三、SurfaceFlinger工作机制
组成架构
SurfaceFlinger是Android系统中负责合成所有Surface并显示到物理屏幕上的服务,它采用双缓冲机制,避免图像撕裂现象,其工作流程如下:
收集所有需要显示的Surface。
按照一定顺序进行排序。
合成到一个大的Surface中。
显示到物理屏幕上。
关键线程
EventControlThread:控制硬件Vsync的开关。
DispSyncThread:软件产生Vsync的线程。
SF EventThread:SurfaceFlinger接收Vsync信号用于渲染。
App EventThread:接收Vsync信号并上报给App进程,开始画图。
四、应用程序基本架构
Android应用进程核心组成
Android应用进程的核心类包括PhoneWindow、Activity、ViewRootImpl等,PhoneWindow的构建是一个非常重要的过程,应用启动显示的内容装载到其内部的mDecor中,Activity要能接收控制也需要mWindowManager发挥作用。
ViewRootImpl的作用
ViewRootImpl是应用进程运转的发动机,内部包含mView(控件树)、mSurface(画布)、Choregrapher(请求Vsync信号),应用的UI渲染会直接放到mSurface中,Choregrapher使得应用请求Vsync信号,接收信号后开始渲染流程。
应用冷启动流程
应用冷启动的第一步是创建进程,这与Linux类似C/C++程序是一致的,Android通过fork孵化应用进程,子进程继承父进程的资源,如art虚拟机实例、预加载的class/drawable资源等,这一过程以付出一些开机时间为代价,但能节省内存并加速应用性能。
五、渲染常见问题及优化
GPU过度绘制(OverDraw)
OverDraw是指一个界面出现层层绘制的情况,会导致性能下降,可以使用第三方工具检测OverDraw,优化布局层级,减少不必要的界面元素,使用png格式的图片,避免使用jpg格式的图片,因为png颜色过渡平滑且支持透明。
渲染时间线分析
正常情况下,Android的GPU会在16ms内完成页面的绘制,如果超过这个时间,垂直同步机制会让显示器等待GPU完成栅格化渲染操作,从而看起来画面停顿,计算渲染的大多数操作必须在16ms内完成,以保证流畅的画面。
六、相关问题与解答
1. requestLayout和invalidate的区别?
requestLayout:请求重新测量和布局当前视图及其子视图,通常用于父布局发生变化时,需要重新测量和布局子视图。
invalidate:请求重新绘制当前视图,通常用于视图内容发生变化时,需要刷新视图。
2. performTraversals到底是干什么了?
performTraversals是ViewRootImpl中的一个方法,负责执行测量、布局、绘制三大流程,它是整个UI渲染的核心方法之一,确保视图的正确显示和更新。
七、归纳
本文详细介绍了Android渲染机制的核心组件和流程,包括Vsync信号的协调、SurfaceFlinger的工作机制、应用程序的基本架构以及常见的渲染问题和优化方法,了解这些知识对于开发者在日常开发中优化应用性能、排查渲染问题具有重要意义。
小伙伴们,上文介绍了“android渲染机制”的内容,你了解清楚吗?希望对你有所帮助,任何问题可以给我留言,让我们下期再见吧。
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/639727.html