主线程不会等待另一个线程完成执行
问题描述:
现在我正面临一个我无法解决的问题,有一个线程需要用特定数据填充两个数组,然后再使用这两个数组,然而,我的主线不会等待线程完成,我不知道为什么! 这里是我的代码主线程不会等待另一个线程完成执行
private void loadingData(){
Thread myThread=new Thread(new Runnable() {
@Override
public void run() {
getNationalities();
getReligions();
}
});
myThread.start();
try {
myThread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
loadingIcon.show();
while(myThread.isAlive()){}
//Here I'm using the two filled arrays
nationalitySpinner();
religionSpinner();
loadingIcon.hide();
}
答
您不能运行在主线程将冻结UI异步联网或操作费时。
尝试使用AsyncTask
,在AsyncTask
OnPostExecute
您可以在UI
示例更新:
private void loadingData(){
new MyTask().execute();
}
class MyTask extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
loadingIcon.show();
}
@Override
protected Void doInBackground(Void... voids) {
getNationalities();
getReligions();
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
nationalitySpinner();
religionSpinner();
loadingIcon.hide();
}
}
欲了解更多信息请参阅Processes and threads,AsyncTask
你可以给我一个例子,如何实现它? –
@AhmedKhairy,更新我的回答 –
它让我空指针异常,我不知道为什么,也许数组尚未填满?但我不知道如何,但我会更清楚你的意思,我希望我的用户界面等待数据填满,而不是在最终用户的盈方面前填满,你能找到我吗? –