我可以在主线程(UI 线程)之外创建 UI 吗?

Posted

技术标签:

【中文标题】我可以在主线程(UI 线程)之外创建 UI 吗?【英文标题】:Can I create UI outside main thread (UI Thread)? 【发布时间】:2013-04-09 18:12:34 【问题描述】:

出于充分的理由(计算数百个视图的测量值),我的 UI 生成时间很长(大约 20 秒)。 我(想?)必须在主线程中创建它们,然后我运行一个进度对话框让用户等待。 虽然,主线程已经被其他计算的创建超载了。 我是否可以在主线程之外创建 UI,尽管我必须测量多个视图?

【问题讨论】:

我认为如果你真的有数百个观点,你就做错了。您可能想要使用 ListView。 “我的 UI 生成时间很长(大约 20 秒),原因很充分(计算数百个视图的测量值)”——“计算数百个视图的测量值”应该需要几毫秒。除了一开始就没有“数百个视图”的反复建议之外,使用 Traceview 找出为什么要花这么长时间。 【参考方案1】:

虽然有些人说他们已经让它工作了,Dianne and Romain say 都认为你不应该在讨论中这样做,因为整个 UI 树是单线程的。他们说它不能保证有效,应该避免。

我想不出任何需要同时实例化和绘制数百个视图的场景。也许您需要使用 ListView,或者在您的应用中实现某种延迟加载。

【讨论】:

以上是关于我可以在主线程(UI 线程)之外创建 UI 吗?的主要内容,如果未能解决你的问题,请参考以下文章

我们是不是需要在主线程或主队列中更新 UI?

检测主线程外的 UI 操作

android AsyncTask 怎么返回值给UI线程

在主线程的密集功能期间 UI 未更新(在 Swift 中)

在UI线程之外,多线程处理Bitmaps

除了主 ui 线程之外,使用 QThread 设置图形时遇到问题