来自Android线程doc:
您不能从工作线程操作用户界面,必须从UI线程对用户界面进行所有操作
因此,我认为屏幕上的所有内容都由UI线程呈现。但在Android Lollipop中,他们introduced了一个RenderThread:
一种新的系统管理处理线程称为RenderThread,即使主UI线程存在延迟,也可以保持动画平滑
它是如何工作的? RenderThread是否使用UI线程在屏幕上渲染动画(具有新属性的视图)?如果是这样,为什么不会阻塞UI线程?
来自Android线程doc:
您不能从工作线程操作用户界面,必须从UI线程对用户界面进行所有操作
因此,我认为屏幕上的所有内容都由UI线程呈现。但在Android Lollipop中,他们introduced了一个RenderThread:
一种新的系统管理处理线程称为RenderThread,即使主UI线程存在延迟,也可以保持动画平滑
它是如何工作的? RenderThread是否使用UI线程在屏幕上渲染动画(具有新属性的视图)?如果是这样,为什么不会阻塞UI线程?
RenderThread
依赖于 UI Thread
,但它会与后者并行运行。
它的主要工作是在 GPU
上运行昂贵的计算,以卸载 UI Thread
的重负。
View#draw
-> UI 线程
DrawFrame
-> Render 线程
,该线程根据 View#draw
阶段执行工作。在使用硬件加速时,更底层的操作是由 DisplayListCanvas 执行的延迟渲染。
在这个 Canvas
实现中,您可以找到前面提到的绘图命令,例如 drawCircle
。
因此,DisplayListCanvas
也是 RenderNodeAnimator 的绘图目标,它运行基本的动画命令(translate
、scale
、alpha
等)。
onDraw()
中进行渲染,UI线程则进行onMeasure()
、onLayout()
等操作。将这些操作分离出来的概念是为了在不阻塞渲染的情况下完成测量和计算等繁重工作,以实现平滑的fps。