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()