ProgressDialog в AsyncTask отображается только в конце задачи в течение короткого времени

У меня есть AsyncTask<Client, Void, Boolean> называется LoginTask с ProgressDialog, который вы можете увидеть здесь. Теперь моя проблема заключается в том, если я запускаю эту задачу с 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 ответ

Решение

Из документов get(),

При необходимости ожидает завершения вычисления, а затем извлекает его результат.

Это означает, что он заблокирует вызов Thread пока исполнение не будет сделано; это побеждает всю цель использования AsyncTask, Просто позвони execute() и обновить пользовательский интерфейс Thread от onPostExecute()

Другие вопросы по тегам