主线程不等待另一个线程完成执行

时间:2017-08-16 10:09:27

标签: android synchronization java-threads

现在我遇到了一个我无法解决的问题,有一个线程,我需要用特定数据填充两个数组,然后再使用这两个数组,但是,我的主线程没有等待线程完成,我不知道为什么! 这是我的代码

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();
}

1 个答案:

答案 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 threadsAsyncTask