如何在不冻结UI的情况下通过加载屏幕正确暂停主线程,直到满足条件为止,

时间:2019-01-16 08:41:33

标签: java android multithreading

您好stackoverflow,谢谢您。

我正在尝试加载加载菜单,直到线程将数组填充到至少5的大小为止,但是UI冻结。

我有一个“新游戏”按钮,当用户单击它时,将创建一个线程,该线程负责填充Array,该线程在后台运行良好。

同时在主线程中,我试图在用户单击“新游戏”按钮后立即显示带有“正在加载”的漂亮动画的加载菜单。 我希望此菜单显示到(Array.size <5),然后才进行处理

gameLayout.setVisibility(view.VISIBLE);

我知道这是最可怕的解决方案,但是我不得不这样做以防止崩溃,直到我弄清楚如何正确执行它为止。加载屏幕开始“可见”,并由于UI冻结而立即停止显示。

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

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

什么是最好的方法?

1 个答案:

答案 0 :(得分:2)

  

如何正确暂停主线程。

您不。主线程(也称为UI线程)永远不应被阻塞。

您说您已经做好了背景工作。条件应作为工作的一部分在后台线程上计算,一旦满足条件,任何结果都将传递回UI线程。