首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么UI线程和渲染线程不能同时运行?

为什么UI线程和渲染线程不能同时运行?
EN

Stack Overflow用户
提问于 2019-03-02 03:21:44
回答 2查看 837关注 0票数 2

多年来,我一直是一个平庸的android开发人员。我喜欢android,但是有一个很大的问题:帧丢失。即使是最强大的设备也可能经常卡顿,而IOS设备可以以恒定的60fps运行。我就是不明白为什么。我想知道。所以我做的第一件事就是观看有关性能的I/O演示。我真的不明白一件事。为什么ui和渲染线程不能同时运行?是的,我知道一些基础知识,比如渲染线程不知道渲染什么,而ui线程正在做它的事情,但是为什么渲染线程不能渲染之前的帧呢?你可以在这里看到视频:https://youtu.be/9HtTL,这是我想要的图表:

你明白我的意思了。我不知道关于android的低级事情,有人能像我五岁那样解释这件事吗?

EN

回答 2

Stack Overflow用户

发布于 2019-03-02 03:41:29

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

作为一个好的实践,您应该在另一个线程上启动IO访问/繁重处理,使其在后台运行,并让系统决定运行它的优先级,如果需要,建议向用户提供一些反馈,如ProgressBar或其他指示正在处理的东西。

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

票数 1
EN

Stack Overflow用户

发布于 2019-03-02 07:25:27

正如@JonGoodwin指出的那样,它们都是并行运行的,但通常是在同一处理器的两个核心中运行,因为现在的手机至少有两个核心。这两个线程都在CPU中运行,RenderThread向GPU发送渲染命令。请注意,从API21开始就是这样(RenderThread启用了像涟漪效果这样的东西)。

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

另外,请参阅Android Developers Backstage的以下一集:Episode 74: Graphics

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

https://stackoverflow.com/questions/54951053

复制
相关文章

相似问题

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