1

我编写了一个简单的 MotionEvent 练习,其中我所做的就是记录事件的参数。我通过在主要活动中实现OnTouchListener并覆盖onTouch()来做到这一点。

对于一个按钮,我在 onTouch() 结束时返回true 。那里没有问题。

对于另一个按钮,我在 onTouch() 结束时返回false 。这就是有趣的地方。仅仅返回“false”,就会抛出一个 FATAL EXCEPTION 并带有一个我不太明白的小提示:“回收两次!”。

这是什么意思?

更新:根据下面评论中的建议,我正在从 LogCat 添加异常的详细信息:

03-08 10:35:14.275: ERROR/AndroidRuntime(521): FATAL EXCEPTION: main
03-08 10:35:14.275: ERROR/AndroidRuntime(521): java.lang.RuntimeException: MotionEvent{405215b0 action=0 x=66.0 y=78.0 pressure=1.0 size=0.0} recycled twice!
03-08 10:35:14.275: ERROR/AndroidRuntime(521):     at android.view.MotionEvent.recycle(MotionEvent.java:659)
03-08 10:35:14.275: ERROR/AndroidRuntime(521):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1880)
03-08 10:35:14.275: ERROR/AndroidRuntime(521):     at android.os.Handler.dispatchMessage(Handler.java:99)
03-08 10:35:14.275: ERROR/AndroidRuntime(521):     at android.os.Looper.loop(Looper.java:123)
03-08 10:35:14.275: ERROR/AndroidRuntime(521):     at android.app.ActivityThread.main(ActivityThread.java:3647)
03-08 10:35:14.275: ERROR/AndroidRuntime(521):     at java.lang.reflect.Method.invokeNative(Native Method)
03-08 10:35:14.275: ERROR/AndroidRuntime(521):     at java.lang.reflect.Method.invoke(Method.java:507)
03-08 10:35:14.275: ERROR/AndroidRuntime(521):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
03-08 10:35:14.275: ERROR/AndroidRuntime(521):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
03-08 10:35:14.275: ERROR/AndroidRuntime(521):     at dalvik.system.NativeStart.main(Native Method)
4

1 回答 1

4

你是回收然后通过false吗?

如果您返回 false,框架将假定 MotionEvent 仍然有效,并将对其进行自己的处理。

文档

回收 MotionEvent,供以后的调用者重用。调用此函数后,您不得再次触摸该事件。

于 2011-03-08T15:48:29.687 回答