У меня есть несколько действий в моем приложении, которые попали в веб-сервис. Поскольку я не хочу задерживать основной поток, этот код находится в AsyncTask. Однако я не хочу, чтобы пользователь манипулировал Activity во время вызова веб-службы, поэтому перед выполнением AsyncTask я показываю ProgressDialog, который вращает и блокирует экран. В методе OnPostExecute AsyncTask первое, что я делаю, - это отклонение ProgressDialog.
Это должно помешать пользователю манипулировать Activity без фактической блокировки основного потока.
Однако я несколько раз замечал, что ProgressDialog никогда не отклоняется, и пользователь застревает. AsyncTask завершен, onPostExcute выполнен, но ProgressDialog все еще отображается. ProgressDialog не имеет шансов когда-либо быть уволенным, и пользователь застревает на экране. Их единственный вариант - посетить приложение «Настройки Android» и принудительно остановить мое приложение.
Кто-нибудь знает, почему это происходит? Что я могу сделать, чтобы это исправить?
Соответствующий код:
Вот как я показываю ProgressDialog и запускаю задачу:
mProgress = ProgressDialog.show(this, "", "Syncing...", true);
(new MyAsyncTask()).execute(intUserId);
Это onPostExcute для задачи. Там нет "@Override"
protected void onPostExecute(Boolean result) {
if (mProgress != null) {
mProgress.dismiss();
mProgress = null;
}
}