Страницы

Поиск по вопросам

среда, 10 июля 2019 г.

AlertDialog has leaked window

Есть вспомогательный класс, который проверяет наличие интернета. Запускаю из него алерт диалог, вылетает некритичная ошибка, когда жму на кнопку "Выход":
android.view.WindowLeaked: Activity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView that was originally added here at android.view.ViewRootImpl.(ViewRootImpl.java:363) at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:261) at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69) at android.app.Dialog.show(Dialog.java:298) at android.support.v7.app.AlertDialog$Builder.show(AlertDialog.java:918)
Получается что при выходе из приложения алерт диалог не закрывает окно. Собственно, сама функция:
public void getInetSettingsDialog(final Context ctx){ //mContext = ctx; AlertDialog.Builder b = new AlertDialog.Builder(ctx); //b.setMessage("Перейти в настройки?"); b.setTitle("Нет интернет соединения"); b.setPositiveButton("Настройки", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { ctx.startActivity(new Intent(Settings.ACTION_SETTINGS)); } }); b.setNegativeButton("Выход", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { ((Activity) ctx).finish(); } }); b.show(); }
Подскажите как можно избавиться от нее?


Ответ

Возможно, ошибка вызвана тем, что диалог пытается отобразиться не между методами жизненного цикла активити - onResume()-onPause(). Если отображать диалог в промежутке меж этими методами - проблем быть не должно.
Если диалог отображается по к-л событию типа наличия/отсутствие интернета, кое может придти вне указанного промежутка, то вы можете не отображать его, отталкиваясь от boolean переменной, коей вы назначаете true в onResume() и false в onPause()

Комментариев нет:

Отправить комментарий