如何在没有冻结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?