发布于 2018-02-05 10:13:54
RenderThread依赖于UI Thread,但它确实与前面提到的并行运行。
它的主要工作是在GPU上运行昂贵的计算,以清空UI Thread的繁重负载。
它怎麽工作?
基本上,UI Thread充当一个作业调度程序。它准备一个在RenderThread上执行的命令管道。
GPU不知道动画是什么;它只能理解基本命令,例如:
translation(x,y,z)rotate(x,y)或基本绘图实用程序:
drawCircle(centerX, centerY, radius, paint)drawRoundRect(left, top, right, bottom, cornerRadiusX, cornerRadiusY, paint)它们结合在一起,形成了你在屏幕上看到的复杂的动画。
RenderThread是否使用UI线程在屏幕上呈现动画(具有新属性的视图)?
不,它异步运行。
如果是的话,为什么不阻止UI线程呢?
文档解释说呈现是分两个阶段执行的:
View#draw -> UI ThreadDrawFrame -> RenderThread,它基于View#draw阶段执行工作。在较低的级别上,当使用硬件加速时,延迟的rendering由DisplayListCanvas执行。
在这个Canvas实现中,您可以找到前面提到的绘图命令,比如drawCircle。
因此,DisplayListCanvas也是RenderNodeAnimator的绘图目标,它运行基本的动画命令(translate、scale、alpha、.)。
发布于 2018-02-05 09:14:53
呈现线程作为其名称解释,只需执行呈现onDraw(),UI线程 do onMeasure(),onLayout()等.
这种分离的概念是在不阻塞渲染导致平滑的fps的情况下进行测量和计算其他事情的艰苦工作。
观看这
https://stackoverflow.com/questions/48618444
复制相似问题