在Lollipop及以上版本中,我应该关注主线程和UI线程之间的区别吗?

7
在Lollipop之前,生活很简单。你有一个main thread - 有时也称为UI线程 - 在其中完成所有GUI工作(并且在长时间运行的操作下避免使用它,以避免任何一种中断),而你有你的background threads,在其中执行长时间运行的任务。
现在,在Android Lollipop和更高版本中,我记得术语UI线程似乎指向用户的新RenderThread,这是一个线程,例如用于动画涟漪、活动之间的英雄元素或任何其他需要在主线程处理输入事件或繁忙创建新内容的情况下发生的动画。
随着Android Studio 1.3,所有三种线程类型现在都有了自己的注释,以表示特定代码块应该在此特定线程上运行。对我来说,现在的问题是:作为应用程序开发人员,我是否应该关心在UIThread,即RenderThread上运行任何东西,并在我的应用程序中使用@UIThread

1
请检查 @UIThread 生成的代码,您可以找到答案。 - Jiang YD
2个回答

3
UIThread 是您的应用程序的主要执行线程。而 RenderThread 则是一个支持处理线程,用于在您的主 UI 线程出现延迟时帮助您的应用程序。从 developer.android.com 引用的说法是:

"RenderThread 是一个新的系统管理的处理线程,即使在主 UI 线程有延迟时,也会保持动画的流畅运行。"

对于您的问题,是否应该在 UIThread 上运行任何内容?答案是肯定的,应该使用 RenderThread 来替代吗?如果可能的话,是的。

2
我记得去年Google IO中Chet Haase介绍了RenderThread,他说首先我们必须像以前一样继续使用MainThread。 只有在动画方面才应该使用RenderThread。例如,如果我们有一个方法onDrawFrame()以流畅的60 fps绘制动画,则应该将其调用到RenderThread中,因为MainThread可能会被应用程序逻辑或其他内容减速。
回到您的问题。 我建议像以前一样使用MainThread。 如果您在动画方面遇到性能问题,请尝试将代码的绘制部分移到RendererThread中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接