首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >RenderThread与UI线程

RenderThread与UI线程
EN

Stack Overflow用户
提问于 2018-02-05 08:31:38
回答 2查看 9.3K关注 0票数 24

来自Android线程文档

您不能从工作线程操作您的UI??您必须从UI线程对您的用户界面进行所有操作。

因此,我相信屏幕上的一切都是由UI线程呈现的。但在安卓棒棒糖,他们有介绍 a RenderThread

一个名为RenderThread的新的系统管理处理线程即使在主UI线程有延迟时也保持动画平滑。

它怎麽工作?RenderThread是否使用UI线程在屏幕上呈现动画(具有新属性的视图)?如果是,为什么不阻止UI线程

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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线程呢?

文档解释说呈现是分两个阶段执行的:

  1. View#draw -> UI Thread
  2. DrawFrame -> RenderThread,它基于View#draw阶段执行工作。

在较低的级别上,当使用硬件加速时,延迟的renderingDisplayListCanvas执行。

在这个Canvas实现中,您可以找到前面提到的绘图命令,比如drawCircle

因此,DisplayListCanvas也是RenderNodeAnimator的绘图目标,它运行基本的动画命令(translatescalealpha、.)。

票数 25
EN

Stack Overflow用户

发布于 2018-02-05 09:14:53

呈现线程作为其名称解释,只需执行呈现onDraw()UI线程 do onMeasure()onLayout()等.

这种分离的概念是在不阻塞渲染导致平滑的fps的情况下进行测量和计算其他事情的艰苦工作。

观看

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48618444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档