У меня возникают проблемы при попытке избежать "Невозможно добавить окно - токен android.os.BinderProxy недействителен; ваша деятельность запущена?" исключение при использовании диалогового окна хода выполнения с асинхронной задачей.
final ProgressDialog nDialog = new ProgressDialog(MainActivity.this);
nDialog.setMessage("Loading...");
nDialog.setIndeterminate(false);
nDialog.setCancelable(false);
if(!isFinishing()){nDialog.show();}
Затем я продолжаю:
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
//Run code while showing progress dialog
ndialog.dismiss
}
}, 1000);
Я понял, что иногда получаю исключение, потому что действие будет завершено, пока идет доступ к ndialog. Таким образом, решение, похоже, изменить ndialog.
Первоначальная проблема с отображением диалога после завершения действия (что случается редко) решается с помощью
if(!isFinishing()){nDialog.show();}
Я подумывал над тем, чтобы поместить этот код в nDialog.dismiss. Но проблема в том, что если я сделаю:
if(!isFinishing()){nDialog.dismiss();}
и действие заканчивается до того, как оно может быть запущено, пользователь застревает с диалоговым экраном, который никогда не будет отклонен.
Я что-то упустил? Как я могу предотвратить эту ошибку, но в то же время убедиться, что диалог запустится и будет закрыт?
Спасибо!