如何显示在活动的onStart()事件开始时显示的ProgressDialog,并在onStart()结束前消失?

时间:2014-03-11 11:16:55

标签: android progressdialog

我的onStart()事件如下所示:

protected void onStart() {
   super.onStart();
   ShowProgressDialog();
   Function1(); //this takes a lot of time to compute
   HideProgressDialog();
   Function2(); //this function uses the values calculated from Function1

}

ProgressDialog不会显示。

PS:AsyncTask对我的问题不是一个很好的解决方案,因为Function2需要从Function1计算的值,我真的不想链4-5 AsyncTasks

5 个答案:

答案 0 :(得分:0)

在开始时编写以下代码

pDialog = new ProgressDialog(this);
            pDialog.setMax(5);
            pDialog.setMessage("Loading...");
            pDialog.setCancelable(true);
            pDialog.show();

答案 1 :(得分:0)

似乎活动不在活动堆栈之上。可以在文档中阅读: http://developer.android.com/reference/android/app/Activity.html

此外,如果您确实有处理,它可以阻止UI线程。我建议把它放在A-Sync任务中。在asynctask中,顺序仍然是从上到下,所以不需要创建乘法a-synctask。

答案 2 :(得分:0)

您需要在后台线程中运行Function1和Function2。只有OnStart()完成后,ProgressDialog才会显示。因此,您需要对耗时的代码进行处理以释放UI,否则进度对话框将无法显示。 这在Android中总是很好的做法,如果你在主线程上运行耗时的东西,操作系统会纠缠用户关于应用程序没有响应的消息。 一些伪代码:

OnStart()
{
ShowProgressDialog();

 StartTimeConsumingThread();
}

然后,在耗时的帖子中:

TimeConsumingThread()
{
Function1();
Function2();

RunOnUiThread(
CloseProogressDialog();
)
}

答案 3 :(得分:0)

执行此操作以显示对话框:

private ProgressDialog inProgressDialog = new ProgressDialog(this);

inProgressDialog.setMessage("In progress...");
inProgressDialog.show();

并停止对话:

inProgressDialog.dismiss();

我认为在你的情况下你可以使用Async任务调用function2并将其作为params传递。

答案 4 :(得分:0)

我认为长时间计算最好使用AsyncTask。 你可以这样做:

private class Task extends AsyncTask<Void, Void, Void> {
ProgressDialog pd;

@Override
        protected void onPreExecute() {
            super.onPreExecute();
            pd = new ProgressDialog(MyActivity.this);
            pd.show();
        }
@Override
        protected Void doInBackground(Void... params) {
            Function1();
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    pd.dismiss();
                }
            });
            Function2();
            return null;
        }
    }