UI线程上的ProgressDialog需要很长时间才能显示

时间:2011-11-07 07:48:30

标签: android progressdialog

我的主要活动中有以下内容:

private void attemptLogin() {
    this.runOnUiThread(new Runnable() {
        @Override
        public void run() {
            dialog = ProgressDialog.show(cntxt, "", "Loading...", true);
        }
    });
    // continue...
}

然而,在我的登录过程完成之后,很长一段时间内,设备或模拟器上都没有出现对话框(无论如何它都会被解散)。

为什么会这样,我该如何解决?

2 个答案:

答案 0 :(得分:2)

告诉您runOnUIThread()是如何工作的,

当您的活动以其默认的UIThread结束时,它将启动,然后将调用runOnUIThread()。因此,如果您在活动中运行了某些内容,则不会显示此内容。

我建议您使用AsyncTasks ..因为您还没有发布任何代码,我的所有建议都基于您在活动中运行某些内容的假设。

答案 1 :(得分:2)

您可以像这样使用异步任务:

private class BackgroundLogin extends AsyncTask<String, Void , InputStream>
{
    @Override
    protected void onPreExecute()
    {
        showDialog(PROGRESS_DIALOG); //SHOW PROGRESS DIALOG                 
    }
    @Override
    protected InputStream doInBackground(String... urls) 
    {
        //Take Data from server or 
        //whatever your background work while progress dialog is spinning
    }
    @Override
    protected void onPostExecute(InputStream responseStream)
    {
          removeDialog(PROGRESS_DIALOG); //REMOVE IT (dont cancel it)
    }

您可以通过以下方式添加/显示进度对话框:

ProgressDialog dialog = new ProgressDialog(this);
            dialog.setTitle("");
            dialog.setMessage("Please wait...");
            dialog.setIndeterminate(true); //Imp line
            dialog.setCancelable(false);
            return dialog;