这是我收到的警告:
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上的细节完全相同
当我单击垂直的三个点以打开溢出菜单并取消它时,我收到该警告。人们似乎对如何抓住它的导火索知之甚少。有什么想法吗?
发布于 2014-01-09 14:03:47
这与你的工作无关。
溢出菜单是由PopupWindow实现的。当用户触摸关闭PopupWindow时,ACTION_DOWN事件将排队到应用程序的消息队列中。然后通过ViewPostImeInputStage类将其传递给View,最后ViewPostImeInputStage将此输入事件发送到PopupWindow的onTouchEvent侦听器。
@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源码在InputEventReceiver.java/base/),在dispose方法设置断点。
https://stackoverflow.com/questions/15175352
复制相似问题