我有一个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();
}
}
最佳答案
来自 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/