From d215e0c04bd39e2f48530c4991089d7db3f217cf Mon Sep 17 00:00:00 2001 From: "lb.wang" Date: Sat, 20 Apr 2019 23:40:24 +0800 Subject: [PATCH] Fix poolable object leak context issue --- .../mikephil/charting/jobs/AnimatedMoveViewJob.java | 9 +++++++++ .../com/github/mikephil/charting/jobs/MoveViewJob.java | 6 ++++++ .../java/com/github/mikephil/charting/jobs/ZoomJob.java | 9 +++++++++ .../com/github/mikephil/charting/utils/ObjectPool.java | 1 + 4 files changed, 25 insertions(+) diff --git a/MPChartLib/src/main/java/com/github/mikephil/charting/jobs/AnimatedMoveViewJob.java b/MPChartLib/src/main/java/com/github/mikephil/charting/jobs/AnimatedMoveViewJob.java index 8f953a06aa..cfc8d1b250 100644 --- a/MPChartLib/src/main/java/com/github/mikephil/charting/jobs/AnimatedMoveViewJob.java +++ b/MPChartLib/src/main/java/com/github/mikephil/charting/jobs/AnimatedMoveViewJob.java @@ -36,6 +36,15 @@ public static AnimatedMoveViewJob getInstance(ViewPortHandler viewPortHandler, f } public static void recycleInstance(AnimatedMoveViewJob instance){ + // Clear reference avoid memory leak + instance.mViewPortHandler = null; + instance.xValue = 0f; + instance.yValue = 0f; + instance.mTrans = null; + instance.view = null; + instance.xOrigin = 0f; + instance.yOrigin = 0f; + instance.animator.setDuration(0); pool.recycle(instance); } diff --git a/MPChartLib/src/main/java/com/github/mikephil/charting/jobs/MoveViewJob.java b/MPChartLib/src/main/java/com/github/mikephil/charting/jobs/MoveViewJob.java index 13d853a8e3..a63d441c91 100644 --- a/MPChartLib/src/main/java/com/github/mikephil/charting/jobs/MoveViewJob.java +++ b/MPChartLib/src/main/java/com/github/mikephil/charting/jobs/MoveViewJob.java @@ -31,6 +31,12 @@ public static MoveViewJob getInstance(ViewPortHandler viewPortHandler, float xVa public static void recycleInstance(MoveViewJob instance){ instance.recycle(); + // Clear reference avoid memory leak + instance.mViewPortHandler = null; + instance.xValue = 0f; + instance.yValue = 0f; + instance.mTrans = null; + instance.view = null; pool.recycle(instance); } diff --git a/MPChartLib/src/main/java/com/github/mikephil/charting/jobs/ZoomJob.java b/MPChartLib/src/main/java/com/github/mikephil/charting/jobs/ZoomJob.java index c39586ca87..c4098ea0b7 100644 --- a/MPChartLib/src/main/java/com/github/mikephil/charting/jobs/ZoomJob.java +++ b/MPChartLib/src/main/java/com/github/mikephil/charting/jobs/ZoomJob.java @@ -37,6 +37,15 @@ public static ZoomJob getInstance(ViewPortHandler viewPortHandler, float scaleX, } public static void recycleInstance(ZoomJob instance) { + // Clear reference avoid memory leak + instance.xValue = 0f; + instance.yValue = 0f; + instance.scaleX = 0f; + instance.scaleY = 0f; + instance.mViewPortHandler = null; + instance.mTrans = null; + instance.axisDependency = null; + instance.view = null; pool.recycle(instance); } diff --git a/MPChartLib/src/main/java/com/github/mikephil/charting/utils/ObjectPool.java b/MPChartLib/src/main/java/com/github/mikephil/charting/utils/ObjectPool.java index d1d54371f9..15e7fc0b88 100644 --- a/MPChartLib/src/main/java/com/github/mikephil/charting/utils/ObjectPool.java +++ b/MPChartLib/src/main/java/com/github/mikephil/charting/utils/ObjectPool.java @@ -117,6 +117,7 @@ public synchronized T get(){ } T result = (T)objects[this.objectsPointer]; + objects[this.objectsPointer] = null; result.currentOwnerId = Poolable.NO_OWNER; this.objectsPointer--;