Android在显示进度对话框时执行代码

时间:2012-08-24 06:42:47

标签: android multithreading dialog

protected void showSpinner() {
    dialogSpin = ProgressDialog.show(activity, "", 
            "Loading. Please wait...", true);

    Thread t = new Thread(new Runnable(){

        @Override
        public void run() {
            activity.runOnUiThread(new Runnable() {
                @Override
                public void run() {


                    EverydayNotesAndroid3Activity.importAllCalendar();
                }
            });
        }

    });
    t.start();
}

我想在线程运行时显示微调器。通过这种方式,我可以显示在导入日历时如何导入日历。

问题:我的Spinner对话框仅在导入完成时显示。我不知道我做错了什么,因为根据我的代码,它应该显示对话框,然后运行导入(需要30秒),但再一次,对话框等待导入结束显示。

感谢您的关注,请求更多信息。

3 个答案:

答案 0 :(得分:2)

考虑调查Asynctasks

答案 1 :(得分:1)

您正在自己的UI线程中导入日历。然后你的进度对话框等待,直到导入完成。然后它将再次显示。

如果要显示进度对话框,请在不在UI线程中的另一个线程中导入日历。

答案 2 :(得分:1)

我会使用AsyncTask导入日历。 AsyncTask有三种可以覆盖的方法。你覆盖doInBackground并完成在后台线程中完成的所有工作。每次在UI中更改某些内容时,您都可以从后台任务调用publishProgress。然后,AsyncTask将在UI-Thread中调用onProgressUpdate,以允许您向用户显示进度。