Replace the cached MotionEvent with getX() value to improve GC state

avoid to cache the whole MotionEvent, since it will clone the whole
instance fields again to cause GC triggering, since we only need the
getX() value in the MotionEvent, rather than the whole data

Bug: 195306545
Test: make SettingsRoboTests
Change-Id: Ic3840b0a4eb6587ec229ba3de2c62ec868d1a535
This commit is contained in:
ykhung
2021-10-06 10:35:50 +08:00
parent 33612098b3
commit d1dd4cdf2c

View File

@@ -108,7 +108,7 @@ public class BatteryChartView extends AppCompatImageView implements View.OnClick
Paint mTrapezoidCurvePaint = null;
private TrapezoidSlot[] mTrapezoidSlots;
// Records the location to calculate selected index.
private MotionEvent mTouchUpEvent;
private float mTouchUpEventX = Float.MIN_VALUE;
private BatteryChartView.OnSelectListener mOnSelectListener;
public BatteryChartView(Context context) {
@@ -255,20 +255,20 @@ public class BatteryChartView extends AppCompatImageView implements View.OnClick
// Caches the location to calculate selected trapezoid index.
final int action = event.getAction();
if (action == MotionEvent.ACTION_UP) {
mTouchUpEvent = MotionEvent.obtain(event);
mTouchUpEventX = event.getX();
} else if (action == MotionEvent.ACTION_CANCEL) {
mTouchUpEvent = null; // reset
mTouchUpEventX = Float.MIN_VALUE; // reset
}
return super.onTouchEvent(event);
}
@Override
public void onClick(View view) {
if (mTouchUpEvent == null) {
if (mTouchUpEventX == Float.MIN_VALUE) {
Log.w(TAG, "invalid motion event for onClick() callback");
return;
}
final int trapezoidIndex = getTrapezoidIndex(mTouchUpEvent.getX());
final int trapezoidIndex = getTrapezoidIndex(mTouchUpEventX);
// Ignores the click event if the level is zero.
if (trapezoidIndex == SELECTED_INDEX_INVALID
|| !isValidToDraw(trapezoidIndex)) {