发布于 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 Thread
DrawFrame
-> 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
复制相似问题