1

イベントのパラメーターをログに記録するだけの単純な MotionEvent 演習を作成しました。OnTouchListenerを実装し、メイン アクティビティでonTouch()をオーバーライドすることでこれを行います。

1 つのボタンについては、onTouch() の最後でtrueを返します。問題ありません。

別のボタンについては、onTouch() の最後でfalseを返します。ここが興味深いところです。「false」を返すだけで、FATAL EXCEPTION がスローされ、よくわからない小さなヒントが表示されます:「2 回リサイクルされました!」。

これは何を意味するのでしょうか?

更新: 以下のコメントの提案に従って、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 に答える