From 84fd57cc1d7b7d6de8dca2619ecb1eb5a11a7184 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E7=A7=91?= Date: Fri, 10 Aug 2018 11:09:52 +0800 Subject: [PATCH] fix wrong use of softreference --- .../java/cn/like/nightmodel/NightModelManager.java | 14 ++++++-------- .../java/cn/like/nightmodel/attr/AttrView.java | 9 +++++---- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/nightmodel/src/main/java/cn/like/nightmodel/NightModelManager.java b/nightmodel/src/main/java/cn/like/nightmodel/NightModelManager.java index f70e339..c5b1ea4 100644 --- a/nightmodel/src/main/java/cn/like/nightmodel/NightModelManager.java +++ b/nightmodel/src/main/java/cn/like/nightmodel/NightModelManager.java @@ -35,7 +35,7 @@ public class NightModelManager { private boolean modelChanged = false; - private SparseArrayCompat>> attrViewMaps = new SparseArrayCompat<>(); + private SparseArrayCompat> attrViewMaps = new SparseArrayCompat<>(); private static final Map> sConstructorMap = new ArrayMap<>(); @@ -139,11 +139,9 @@ private void applyNewModel() { modelChanged = true; int count = attrViewMaps.size(); for (int i=0; i> attrViews = attrViewMaps.valueAt(i); - for (SoftReference attrView : attrViews) { - if (attrView.get() != null) { - attrView.get().apply(); - } + List attrViews = attrViewMaps.valueAt(i); + for (AttrView attrView : attrViews) { + attrView.apply(); } } } @@ -195,13 +193,13 @@ public Object invoke(Object proxy, Method method, Object[] args) throws Throwabl } private void putAttrView(AttrView attrView, int hashCode) { - List> attrViews; + List attrViews; if (attrViewMaps.indexOfKey(hashCode) > -1) { attrViews = attrViewMaps.get(hashCode); } else { attrViews = new ArrayList<>(); } - attrViews.add(new SoftReference<>(attrView)); + attrViews.add(attrView); attrViewMaps.put(hashCode, attrViews); } diff --git a/nightmodel/src/main/java/cn/like/nightmodel/attr/AttrView.java b/nightmodel/src/main/java/cn/like/nightmodel/attr/AttrView.java index 24c2d72..5833b20 100644 --- a/nightmodel/src/main/java/cn/like/nightmodel/attr/AttrView.java +++ b/nightmodel/src/main/java/cn/like/nightmodel/attr/AttrView.java @@ -2,25 +2,26 @@ import android.view.View; +import java.lang.ref.SoftReference; import java.util.List; /** * Created by like on 16/7/20. */ public class AttrView { - View view; + SoftReference view; List attrs; public AttrView(View view, List attrs) { - this.view = view; + this.view = new SoftReference<>(view); this.attrs = attrs; } public void apply() { - if (null == view) return; + if (null == view || view.get() == null) return; for (Attr attr : attrs) { - attr.apply(view); + attr.apply(view.get()); } } }