Вращаясь, пока 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()
из PopupMenu
onStop()
, Тем не менее, так как это не деятельность, а ViewGroup
, У меня нет onStop()
, Итак, я попытался найти одноименное событие, и нашел onDetachedFromWindow()
, я звонил dismiss()
в onDetachedFromWindow()
,
onDetachedFromWindow()
вызывается перед поворотом экрана, но я все равно получаю сообщение об ошибке WindowLeaked.
Как я могу решить эту проблему? На самом деле, кажется, что приложение работает нормально, и все, что я получаю, это сообщение об ошибке в журнале. Эта ошибка игнорируется?
1 ответ
Возможно, этот ответ слишком поздно для вас, но я поделюсь тем, что узнал, если кому-то еще это интересно. PopupMenu
использования PopupWindow
внутренне. Когда вы звоните PopupMenu.dismiss()
это вызывает PopupWindow.dismiss()
но отклонив PopupWindow
не является немедленным, когда указан выходной переход. Несмотря на то, что вы звоните dismiss()
в соответствующее время окно фактически не удаляется из иерархии достаточно быстро. Его нужно удалить до того, как ваша активность будет уничтожена, чтобы не было этой ошибки утечки. Я не вижу средства отстранения PopupMenu
немедленно. Возможным обходным путем может быть использование PopupWindow
прямо вместо PopupMenu
и позвоните setExitTransition(null)
до увольнения.