From 9db33d9c1c1e92926d32eadf34a65cb3f38f619b Mon Sep 17 00:00:00 2001 From: Jiwon Kim Date: Wed, 11 Nov 2020 18:21:11 +0900 Subject: Fixed Handler Leak on RecyclerView A MotionEvent object is not recycled in case of error at onTouchEvent function. @Override public boolean onTouchEvent(MotionEvent e) { ... final MotionEvent vtev = MotionEvent.obtain(e); ... case MotionEvent.ACTION_MOVE: { final int index = e.findPointerIndex(mScrollPointerId); if (index < 0) { Log.e(TAG, "Error processing scroll; pointer index for id " + mScrollPointerId + " not found. Did any MotionEvents get skipped?"); return false; } ... } Test: Manual Signed-off-by: Jiwon Kim Change-Id: I8390a5d8c78b306a6c81dce9d41ceffe93bfdeb7 --- core/java/com/android/internal/widget/RecyclerView.java | 1 + 1 file changed, 1 insertion(+) diff --git a/core/java/com/android/internal/widget/RecyclerView.java b/core/java/com/android/internal/widget/RecyclerView.java index d7a01c4762f1..ecc72c62b270 100644 --- a/core/java/com/android/internal/widget/RecyclerView.java +++ b/core/java/com/android/internal/widget/RecyclerView.java @@ -2799,6 +2799,7 @@ public class RecyclerView extends ViewGroup implements ScrollingView, NestedScro if (index < 0) { Log.e(TAG, "Error processing scroll; pointer index for id " + mScrollPointerId + " not found. Did any MotionEvents get skipped?"); + vtev.recycle(); return false; } -- cgit v1.2.3-59-g8ed1b