2

我是一个 mediocore android 开发人员多年。我喜欢android,但有一个大问题;掉帧。即使是最强大的设备也会如此频繁地卡顿,而 IOS 设备可以以恒定的 60fps 运行。我只是不明白为什么。我想知道。所以我做的第一件事就是观看关于性能的 I/O 演示。我真的不明白一件事。为什么 ui 和 render 线程不能同时运行?是的,我知道像渲染线程这样的基础知识在ui线程正在做的时候不知道要渲染什么,但是为什么渲染线程不能渲染之前的帧?您可以在此处观看视频: https ://youtu.be/9HtTL_RO2wI?t= 491 这是我要的图表: 图表

你明白了。我不了解有关 android 的低级事物,任何人都可以像我五岁那样解释这一点。

4

2 回答 2

1

您的进程的主线程负责渲染将呈现给用户的帧,因此您应该让代码尽可能快速和轻便地运行在那里。如果您必须进行一些繁重的处理或访问任何可能影响应用程序流动性的 IO(网络、SD 卡等),因为线程可能正在等待响应。

作为一种好的做法,您应该在另一个线程上启动 IO 访问/繁重处理以在后台运行,并让系统决定运行它的优先级,如有必要,建议向用户提供一些反馈,如 ProgressBar 或其他指示正在处理某事。

此外,渲染线程需要在它执行之前知道要渲染什么,因此 UI 线程必须处理应用程序想要呈现给用户的信息。

于 2019-03-01T19:41:29.380 回答
1

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

不过,@LucianoFerruzzi 指出的问题是:通常在 UI 线程中做太多事情的糟糕代码(RenderThread 不可访问,至少在标准机制下不可访问)。

此外,请参阅以下Android Developers Backstage剧集:第 74 集:图形

于 2019-03-01T23:25:27.407 回答