android 渲染流程

measure    (first|layoutRequest)   (main thread)
    onMeasure
    setMeasuredDimension
layout     (first|layoutRequest)   (main thread)
    setFrame
    onLayout
draw       (dirty|animation)       (main thread)  -> display list
    drawBackground
    onDraw            (自身)
    dispatchDraw      (子view)
    onDrawScrollBars
sync                               (render thread)
process   (display list)           (render thread): draw command--opengl api-->gpu command
send and wait (glFlush/glFinish)   (render thread) driver : send gpu command buffer->gpu command queue (render thread blocked)
execute                            (gpu) : render thread blocked
swap buffer   (glSwapBuffers)      (render thread) -> (surfaceflinger)
composition                        (surfaceflinger)














深入了解Android Graphics Pipeline

Let’s talk about eglMakeCurrent, eglSwapBuffers, glFlush, glFinish

OpenGL Synchronization


Android系统的UI渲染流程是一个复杂的过程,涉及多个组件之间的协作。整个流程可以分为以下几个主要阶段: ### 渲染流程概述 #### 绘制指令生成 应用程序中的`View`组件负责生成绘制指令。这些指令描述了如何绘制界面元素,例如文本、图像和形状等。 #### OpenGL ES处理 绘制指令通常通过OpenGL ES API发送到GPU。OpenGL ES是一个轻量级的图形渲染库,专门用于移动设备和嵌入式系统[^3]。 #### 栅格化 GPU接收这些指令后,将矢量图形转换为像素(这一过程称为栅格化)。这个过程涉及到复杂的计算,以确保图像在不同分辨率下都能保持清晰。 #### VSync信号 为了保证屏幕刷新率维持在60fps,Android系统每16ms发送一次VSync信号。这标志着新一帧的开始绘制[^4]。 #### 帧提交 在VSync信号到达时,所有绘制操作必须完成,并将新的帧提交给`SurfaceFlinger`。这是确保流畅动画的关键步骤。 #### 显示 最后,`SurfaceFlinger`将所有提交的帧组合起来,并通过显示控制器输出到屏幕上。这样就完成了从应用逻辑到实际显示的全过程[^3]。 ### 渲染流程图示例 下面是一个简化的Android UI渲染流程图: ``` +---------------------+ | Application View | +----------+----------+ | v +----------+----------+ | Drawing Commands | +----------+----------+ | v +----------+----------+ | OpenGL ES Rendering | +----------+----------+ | v +----------+----------+ | Rasterization | +----------+----------+ | v +----------+----------+ | VSync Signal | +----------+----------+ | v +----------+----------+ | Frame Submission to | | SurfaceFlinger | +----------+----------+ | v +----------+----------+ | Display Output | +-----------------------+ ``` ### 原理说明 - **绘制指令**:应用程序中的`View`产生绘制指令。 - **OpenGL ES**:这些指令通过OpenGL ES API发送到GPU。 - **栅格化**:GPU根据这些指令将矢量图形转换为像素。 - **VSync信号**:Android系统每16ms发送一次VSync信号,确保屏幕刷新率为60fps。 - **帧提交**:在VSync信号到达时,所有绘制操作必须完成,并将新的帧提交给`SurfaceFlinger`。 - **显示**:`SurfaceFlinger`将所有提交的帧组合起来,并通过显示控制器输出到屏幕上。 以上流程确保了Android设备能够在各种应用场景下提供流畅的用户体验。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值