Nik*_*nko 8 multithreading android
来自Android Threads doc:
您不能从工作线程操纵UI - 您必须从UI线程对您的用户界面进行所有操作
所以我相信屏幕上的所有内容都是由UI线程呈现的.但是在Android Lollipop中他们引入了一个RenderThread:
一个名为RenderThread的新系统管理处理线程即使在主UI线程中存在延迟时也能保持动画流畅
它是如何工作的?RenderThread是否使用UI线程在屏幕上呈现动画(具有新属性的视图)?如果是这样,为什么不阻止UI线程?
Mar*_*cak 18
这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
、 ...)。
归档时间: |
|
查看次数: |
3496 次 |
最近记录: |