如何在没有冻结UI的情况下使用加载屏幕正确暂停主线程直到满足条件,

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在没有冻结UI的情况下使用加载屏幕正确暂停主线程直到满足条件,相关的知识,希望对你有一定的参考价值。

你好stackoverflow并提前谢谢你。

我正在尝试加载一个加载菜单,直到线程已经填充了一个至少大小为5的数组,但UI冻结了。

我有一个“新游戏”按钮,当用户点击它时,创建一个线程,这个线程负责填充一个数组,这个线程在后台工作正常。

同时在主线程中,我试图在用户点击“新游戏”按钮时显示一个带有“加载”动画的加载菜单。我想要显示这个菜单,直到(Array.size <5),然后才开始

gameLayout.setVisibility(view.VISIBLE);

我知道这是最可怕的解决方案,但我必须这样做以防止崩溃,直到我弄清楚如何正确地做到这一点。加载屏幕开始“可见”并在可见之前立即停止,因为UI冻结。

loadingLayout.setVisibility(view.VISIBLE)
while(Array.size < 5)
{

}
loadingLayout.setVisibility(view.INVISIBLE)
gameLayout.setVisibility(view.VISIBLE) 

什么是最好的方法呢?

答案

如何正确暂停主线程。

你没有。永远不应该阻止主线程(也称为UI线程)。

你说你有你的背景工作。条件应该作为工作的一部分在后台线程上计算,并且一旦遇到任何结果传递回UI线程。

以上是关于如何在没有冻结UI的情况下使用加载屏幕正确暂停主线程直到满足条件,的主要内容,如果未能解决你的问题,请参考以下文章

如何停止/冻结/暂停波动的 RAND / RANDBETWEEN / RANDARRAY?

如何在不冻结 UI 的情况下使用 QProcess 循环的输出更新 UI?

如何在不冻结 UI 的情况下使用 QProcess 循环的输出更新 UI?

如何正确加载依赖的 tableViewCell API 数据?

WPF - 为什么UI锁定?

如何在不阻塞 UI 的情况下暂停 Java 指定时间? [复制]