我的Android应用程序的一些用户报告了一个罕见但始终如一的错误。用户反馈与此网页一致,该网页在Android Gingerbread 2.3.1的用户触摸Tricorder程序中的屏幕时报告错误:

http://code.google.com/p/moonblink/issues/detail?id=138

我在onTouchEvent方法中调用event.recycle(),但此后我没有返回false。因此,此答案不适用:

Why would onTouch() generate FATAL EXCEPTION when returning false?

这是姜饼中的错误吗?我从未听说过2.1或2.2中的应用程序发生这种情况。

Google开发者控制台报告的整个堆栈跟踪为:

java.lang.RuntimeException: MotionEvent{40521420 action=0 x=368.0 y=373.04865 pressure=0.3921569 size=0.0} recycled twice!
at android.view.MotionEvent.recycle(MotionEvent.java:659)
at android.view.ViewRoot.handleMessage(ViewRoot.java:1880)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:3683)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
at dalvik.system.NativeStart.main(Native Method)

最佳答案

也许您可以从event.recycle()方法中删除onTouchEvent(),因为似乎系统已经为您完成了该操作。我遇到了同样的异常,删除event.recycle()后一切正常。

10-06 11:22