AsyncTask中的ProgressDialog仅在任务结束时显示一小段时间

时间:2013-12-08 14:43:00

标签: java android android-asynctask progressdialog

我有AsyncTask<Client, Void, Boolean>名为LoginTaskProgressDialog,您可以在此处查看。 现在我的问题是,如果我使用LoginTask(...).execute().get()启动此任务,ProgressDialog只会在AsyncTask的末尾显示非常短的时间。我也加入了一些Thread.sleep(),但如果我这样做,我还会在主题的末尾得到一个ProgressDialog

ProgressDialog如何显示整个异步任务?

    public class LoginTask extends AsyncTask<Client, Void, Boolean>
    {
      private ProgressDialog progressDialog;
      private MainActivity activity;

      public LoginTask(MainActivity activity)
      {
    this.activity = activity;
  }

  @Override
  protected void onPreExecute()
  {
    progressDialog = new ProgressDialog(activity);
    progressDialog.setIndeterminate(true);
    progressDialog.setMessage(activity.getText(R.string.asynctask_login_connect));
    progressDialog.setCancelable(false);
    progressDialog.show();
  }

  @Override
  protected Boolean doInBackground(Client... params)
  {
    try
    {
      Client client = params[0];
      if (client.connect())
      {
        progressDialog.setMessage(activity.getText(R.string.asynctask_login));
        if (client.manageHandshake())
        {
          return true;
        }
        else
          return false;
      }
      else
        return false;
    }
    catch (Exception e)
    {
      Log.e(LoginTask.class.getSimpleName(), "Can not handshake and connect to/with server.", e);
      return false;
    }
  }

  @Override
  protected void onPostExecute(Boolean result)
  {
    progressDialog.dismiss();
  }

}

1 个答案:

答案 0 :(得分:2)

来自get()的文档,

  

如果需要等待计算完成,然后检索   结果。

这意味着它将阻止调用Thread,直到执行完成;这违背了使用AsyncTask的全部目的。只需致电execute()并从Thread

更新用户界面onPostExecute()即可