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 ThreadDrawFrame-> RenderThread,它根据View#draw阶段执行工作。在较低级别上,当使用硬件加速时,延迟rendering由DisplayListCanvas执行 。
在此Canvas实现中,您可以找到上述绘图命令,例如drawCircle.
因此,DisplayListCanvas也是RenderNodeAnimator的绘制目标,它运行基本动画命令(translate、scale、alpha、 ...)。
| 归档时间: |
|
| 查看次数: |
3496 次 |
| 最近记录: |