现在我遇到了一个我无法解决的问题,有一个线程,我需要用特定数据填充两个数组,然后再使用这两个数组,但是,我的主线程没有等待线程完成,我不知道为什么! 这是我的代码
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();
}
答案 0 :(得分:3)
您无法在主线程中运行异步网络或耗时的操作,它将冻结UI。
尝试使用AsyncTask
OnPostExecute
中的AsyncTask
,您可以在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