java - AsyncTask中的ProgressDialog仅在任务结束时短暂显示

标签 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();
  }

}

最佳答案

来自 get() 的文档,

Waits if necessary for the computation to complete, and then retrieves its result.

这意味着它将阻塞调用Thread直到执行完成;这违背了使用 AsyncTask 的全部目的。只需调用 execute() 并从 onPostExecute() 更新 UI Thread

关于java - AsyncTask中的ProgressDialog仅在任务结束时短暂显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20454654/

相关文章:

android - 如何从类中获取字符串? (Android studio) abbyy OCR 识别

android - "fixing"竖屏动态壁纸

Android滑动和addforce统一

java - 使用 XML 文件在 swing 中构建 GUI

java - JSTL 的 rt 和 el 版本有什么区别?

java - 在布局中添加子项时无法将焦点放在 editText 上

android - 方向更改后未完成的 AsyncTask 中的 View 引用会发生什么情况?

java - 在快速排序结束时实现冒泡排序

android - SetListAdapter 仅在 Debug模式下工作

android - 异步任务卡住 UI