Вращаясь, пока PopupMenu показывает, получает android.view.WindowLeaked

Я создал простой пользовательский макет, расширяя ViewGroup, Я создаю Button и PopupMenu на init(), Если кнопка нажата, PopupMenu показано Проблема в том, что когда PopupMenu показывает, если я поворачиваю устройство, я получаю следующее сообщение об ошибке.

E / WindowManager: android.view.WindowLeaked: активность просочилась в окно android.widget.PopupWindow$PopupDecorView{c44e7da VE..... ......ID 0,0-392,960}, которое было первоначально добавлено здесь

Я нашел похожий вопрос ( утечка PopupMenu PopupWindow$PopupViewContainer), и решение вызывало dismiss() из PopupMenuonStop(), Тем не менее, так как это не деятельность, а ViewGroup, У меня нет onStop(), Итак, я попытался найти одноименное событие, и нашел onDetachedFromWindow(), я звонил dismiss() в onDetachedFromWindow(),

onDetachedFromWindow() вызывается перед поворотом экрана, но я все равно получаю сообщение об ошибке WindowLeaked.

Как я могу решить эту проблему? На самом деле, кажется, что приложение работает нормально, и все, что я получаю, это сообщение об ошибке в журнале. Эта ошибка игнорируется?

1 ответ

Возможно, этот ответ слишком поздно для вас, но я поделюсь тем, что узнал, если кому-то еще это интересно. PopupMenu использования PopupWindow внутренне. Когда вы звоните PopupMenu.dismiss() это вызывает PopupWindow.dismiss() но отклонив PopupWindow не является немедленным, когда указан выходной переход. Несмотря на то, что вы звоните dismiss() в соответствующее время окно фактически не удаляется из иерархии достаточно быстро. Его нужно удалить до того, как ваша активность будет уничтожена, чтобы не было этой ошибки утечки. Я не вижу средства отстранения PopupMenu немедленно. Возможным обходным путем может быть использование PopupWindow прямо вместо PopupMenuи позвоните setExitTransition(null) до увольнения.

Другие вопросы по тегам