Предупреждение при отмене меню переполнения ActionBar на Android 4.1.x

Это предупреждение, которое я получаю:

03-02 14:38:43.980: W/InputEventReceiver(3961): Attempted to finish an input event but the input event receiver has already been disposed.

Меню у меня было сгенерировано из обычного res/menu/activity_menu.xml файла. Я обрабатываю события точно так, как описано на http://developer.android.com/guide/topics/ui/menus.html#options-menu

Когда я нажимаю вертикальные три точки, чтобы открыть меню переполнения и выйти из него, я получаю это предупреждение. Кажется, мало кто знает, как поймать его триггер. Есть идеи?


person alexismorin    schedule 02.03.2013    source источник
comment
Это предупреждение, и оно не является частью вашего приложения. Похоже проблема в самом андроиде. Вы должны быть в состоянии игнорировать это безопасно   -  person Raghav Sood    schedule 02.03.2013
comment
Вы используете ActionBar Sherlock?   -  person Justin Vartanian    schedule 02.03.2013
comment
@ДжастинВ. Я использую стоковый Android для этого.   -  person alexismorin    schedule 03.03.2013
comment
Я должен согласиться с @RaghavSood. Это не проблема с вашим приложением. Это проблема андроида. У ActionBarSherlock есть проблема, открытая по этому предупреждению, но, очевидно, она не относится только к ActionBarШерлок   -  person Justin Vartanian    schedule 03.03.2013
comment
Назовите меня OCD, но просто приятно иметь возможность создавать приложения без сквозных предупреждений. Спасибо за быстрые ответы. Буду следить за решением этой проблемы.   -  person alexismorin    schedule 03.03.2013
comment
есть прогресс?   -  person Compaq LE2202x    schedule 05.09.2013
comment
Я тоже хотел бы узнать об этом предупреждении, пожалуйста, если кто знает, ответьте   -  person Sartheris Stormhammer    schedule 15.11.2013
comment
Я столкнулся с подобной проблемой, но это проблема для меня. Спиннер работает большую часть времени, но иногда он все же открывается и закрывается, и вы можете нажать на него. Но при нажатии не выполняется никаких действий, просто закрывается счетчик. Есть новая информация по этому поводу? У меня было предупреждение на GS3   -  person Seynorth    schedule 31.12.2013
comment
Та же проблема, когда я отменяю PopupMenu на Android 4.4.4.   -  person Alex Vang    schedule 10.09.2014


Ответы (1)


Это не связано с вашей работой.

Меню переполнения реализовано PopupWindow. Когда пользователь касается, чтобы закрыть PopupWindow, событие ACTION_DOWN помещается в очередь сообщений приложения. Затем оно доставляется в View через класс ViewPostImeInputStage, и, наконец, ViewPostImeInputStage отправляет это событие ввода прослушивателю onTouchEvent PopupWindow.

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        final int x = (int) event.getX();
        final int y = (int) event.getY();

        if ((event.getAction() == MotionEvent.ACTION_DOWN)
                && ((x < 0) || (x >= getWidth()) || (y < 0) || (y >= getHeight()))) {
            dismiss();
            return true;
        } else if (event.getAction() == MotionEvent.ACTION_OUTSIDE) {
            dismiss();
            return true;
        } else {
            return super.onTouchEvent(event);
        }
    }

dissmiss() пытается закрыть PopupWindow, а PopupWindow::onDetachedWindow сначала вызывает WindowInputEventReceiver::dispose().

А затем ViewPostImeInputStage вызывает WindowInputEventReceiver::finishInputEvent, чтобы завершить это событие ACTION_DOWN. Однако экземпляр WindowInputEventReceiver уже удален, поэтому он выдает предупреждающие сообщения.

Вы можете отладить его по точке останова. откройте InputEventReceiver.java (нужен исходный код Android в framework/base/) и установите точку останова в методе dispose.

person skyisle    schedule 09.01.2014
comment
Спасибо, что поделились этим! Но как избавиться от этого предупреждения? Я не совсем понимаю основную проблему? В Marshmallow после закрытия PopupMenu клавиатура автоматически скрывается и теряет меню и клавиатуру, поскольку я создал пользовательский IME с PopupMenu. Не могли бы вы помочь? - person Mohammad AlBanna; 09.08.2016