线程正在运行时不显示ProgressDialog

时间:2015-09-16 20:47:06

标签: android multithreading progressdialog

我正在尝试在从API加载一些数据时显示ProgressDialog。我将APIPost放入一个线程中,出于调试目的,我一直在让线程休眠3秒钟,试图让对话框出现。但是,当我启动线程时,没有对话框出现,UI线程只是挂起。我错过了什么吗?

final ProgressDialog dialog;

    dialog = new ProgressDialog(MyClassName.this);

    dialog.setTitle("");
    dialog.setMessage("Loading...");
    dialog.setCancelable(false);

    Thread runner = new Thread(){
        JSONObject jTemp;
        @Override
        public void run(){
            try {
                synchronized(this){
                    wait(3000);
                }
                getFarmProperties.postAPI(tempAddress);

                do {
                    jTemp = getFarmProperties.getJSON();
                } while (jTemp == null);
            }
            catch(InterruptedException ex){
            }

        }
    };

    try {
        runner.start();
        dialog.show();
        runner.join();
        dialog.dismiss();
    } catch (Exception e) {
        e.printStackTrace();
    }

2 个答案:

答案 0 :(得分:0)

runner.join阻止UI线程,直到跑步者最终完成。正如建议的那样使用AsyncTask。

答案 1 :(得分:0)

runner.start();
dialog.show();
runner.join();
dialog.dismiss();

这实际上启动了线程,发布了一个显示进度对话框的请求,等待线程完成然后关闭进度对话框。

由于仅在UI线程有机会处理消息队列时绘制了进度对话框,因此它从未被绘制过。

使用AsyncTask并关闭onPostExecute()中的对话框或删除join()并在后台线程使用runOnUIThread()时关闭进度对话框。我建议使用AsyncTask,因为它为您完成了所有管理,包括方便的回调方法。