为什么UI线程和Render线程不能同时运行?

时间:2019-03-01 19:21:44

标签: android multithreading

我是多年的mediocore android开发人员。我喜欢android,但是有一个大问题。帧下降。在IOS设备可以恒定60fps的速度运行的情况下,即使是功能最强大的设备也可能频繁停顿。我只是不明白为什么。我想知道所以我要做的第一件事就是观看有关性能的I / O演示。我真的不了解一件事。 ui和render线程为什么不能同时运行?是的,我知道诸如渲染线程之类的基础知识在ui线程执行操作时不知道要渲染什么,但是为什么渲染线程之前不能渲染框架?您可以在此处观看视频: https://youtu.be/9HtTL_RO2wI?t=491 这是一个图,我在问什么: Dıagram

您明白了。我不了解有关android的低级知识,有人可以像我五岁这样解释吗。

2 个答案:

答案 0 :(得分:1)

您的进程的主线程负责呈现将呈现给用户的框架,因此您应使代码在此尽可能快和轻便地运行。由于线程可能正在等待响应,因此如果您必须进行一些繁重的处理或访问任何可能影响应用程序流畅性的IO(网络,SD卡等)。

作为一个好习惯,您应该在另一个线程上开始IO访问/繁重的处理以在后台运行,并让系统决定运行它的优先级,如果有必要,建议向用户提供一些反馈,例如ProgressBar或类似的东西表示正在处理某些东西。

此外,Render Thread需要先知道要呈现什么内容,因此UI Thread必须处理该应用想要呈现给用户的信息。

答案 1 :(得分:1)

正如@JonGoodwin指出的那样,它们都可以并行运行,但通常在同一处理器的两个内核中运行,因为当今的电话至少具有两个内核。这两个线程都在CPU中运行,RenderThread在其中将渲染命令发送到GPU。请注意,自API 21(RenderThread是启用涟漪效应之类的东西)以来,这就是事实。

但是,问题是@LucianoFerruzzi指出的:通常,不良代码会在UI线程中执行太多操作(RenderThread无法访问,至少不能使用标准机制访问)。

另外,请参见以下Android Developers Backstage集:Episode 74: Graphics