From 4028fefe4f044505e34b8205274132b544319237 Mon Sep 17 00:00:00 2001 From: winfirm Date: Sat, 10 Jan 2015 00:18:40 +0800 Subject: [PATCH] update Handler avoid memory leak. --- .../common/view/AutoPlayManager.java | 14 +++++-- .../common/view/ImageIndicatorView.java | 42 +++++++++++-------- 2 files changed, 34 insertions(+), 22 deletions(-) diff --git a/AndroidImageIndicator/src/com/allthelucky/common/view/AutoPlayManager.java b/AndroidImageIndicator/src/com/allthelucky/common/view/AutoPlayManager.java index fdff4b2..648b2f7 100644 --- a/AndroidImageIndicator/src/com/allthelucky/common/view/AutoPlayManager.java +++ b/AndroidImageIndicator/src/com/allthelucky/common/view/AutoPlayManager.java @@ -1,5 +1,7 @@ package com.allthelucky.common.view; +import java.lang.ref.WeakReference; + import android.os.Handler; import android.os.Message; @@ -163,17 +165,21 @@ public class AutoPlayManager { } } - static class BroadcastHandler extends Handler { - private AutoPlayManager autoBrocastManager; + private static class BroadcastHandler extends Handler { + + private final WeakReference autoBrocastManagerRef; public BroadcastHandler(AutoPlayManager autoBrocastManager) { - this.autoBrocastManager = autoBrocastManager; + this.autoBrocastManagerRef = new WeakReference( + autoBrocastManager); } @Override public void handleMessage(Message msg) { super.handleMessage(msg); - if (this.autoBrocastManager != null) { + AutoPlayManager autoBrocastManager = autoBrocastManagerRef.get(); + + if (autoBrocastManager != null) { autoBrocastManager.handleMessage(msg); } } diff --git a/AndroidImageIndicator/src/com/allthelucky/common/view/ImageIndicatorView.java b/AndroidImageIndicator/src/com/allthelucky/common/view/ImageIndicatorView.java index 06fa917..2f3b9c3 100644 --- a/AndroidImageIndicator/src/com/allthelucky/common/view/ImageIndicatorView.java +++ b/AndroidImageIndicator/src/com/allthelucky/common/view/ImageIndicatorView.java @@ -1,5 +1,6 @@ package com.allthelucky.common.view; +import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -385,8 +386,30 @@ public class ImageIndicatorView extends RelativeLayout { } } } + + /** + * ScrollIndicateHandler + */ + private static class ScrollIndicateHandler extends Handler { + private final WeakReference scrollIndicateViewRef; + + public ScrollIndicateHandler(ImageIndicatorView scrollIndicateView) { + this.scrollIndicateViewRef = new WeakReference( + scrollIndicateView); + + } + + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + ImageIndicatorView scrollIndicateView = scrollIndicateViewRef.get(); + if (scrollIndicateView != null) { + scrollIndicateView.refreshIndicateView(); + } + } + } - public class MyPagerAdapter extends PagerAdapter { + private class MyPagerAdapter extends PagerAdapter { private List pageViews = new ArrayList(); public MyPagerAdapter(List pageViews) { @@ -441,20 +464,3 @@ public class ImageIndicatorView extends RelativeLayout { } } - -class ScrollIndicateHandler extends Handler { - private ImageIndicatorView scrollIndicateView; - - public ScrollIndicateHandler(ImageIndicatorView scrollIndicateView) { - this.scrollIndicateView = scrollIndicateView; - - } - - @Override - public void handleMessage(Message msg) { - super.handleMessage(msg); - if (this.scrollIndicateView != null) { - scrollIndicateView.refreshIndicateView(); - } - } -}