diff --git a/tangram/src/main/java/com/tmall/wireless/tangram/BaseTangramEngine.java b/tangram/src/main/java/com/tmall/wireless/tangram/BaseTangramEngine.java index 8b33d01..cc86b27 100644 --- a/tangram/src/main/java/com/tmall/wireless/tangram/BaseTangramEngine.java +++ b/tangram/src/main/java/com/tmall/wireless/tangram/BaseTangramEngine.java @@ -28,7 +28,6 @@ import android.content.Context; import android.os.Build.VERSION; import android.support.annotation.NonNull; import android.support.annotation.Nullable; -import android.support.v4.util.ArrayMap; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView.ChildDrawingOrderCallback; import android.view.View; @@ -54,8 +53,6 @@ import com.tmall.wireless.tangram.op.ParseComponentsOp; import com.tmall.wireless.tangram.op.ParseGroupsOp; import com.tmall.wireless.tangram.op.ParseSingleComponentOp; import com.tmall.wireless.tangram.op.ParseSingleGroupOp; -import com.tmall.wireless.tangram.op.TangramOp2; -import com.tmall.wireless.tangram.op.TangramOp3; import com.tmall.wireless.tangram.structure.BaseCell; import com.tmall.wireless.tangram.structure.card.VVCard; import com.tmall.wireless.tangram.support.BannerSupport; @@ -68,6 +65,12 @@ import com.tmall.wireless.tangram.util.Preconditions; import com.tmall.wireless.tangram.util.Predicate; import com.tmall.wireless.vaf.framework.VafContext; import com.tmall.wireless.vaf.framework.ViewManager; + +import java.util.Arrays; +import java.util.LinkedList; +import java.util.List; +import java.util.concurrent.ConcurrentHashMap; + import io.reactivex.Observable; import io.reactivex.ObservableSource; import io.reactivex.ObservableTransformer; @@ -76,12 +79,6 @@ import io.reactivex.functions.Consumer; import io.reactivex.functions.Function; import io.reactivex.schedulers.Schedulers; -import java.util.Arrays; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - /** * {@link O} is the type of data, {@link T} is the array type of data, {@link C} is the class of Group, {@link L} is the class of Component * diff --git a/tangram/src/main/java/com/tmall/wireless/tangram/DefaultResolverRegistry.java b/tangram/src/main/java/com/tmall/wireless/tangram/DefaultResolverRegistry.java index 381dc86..5f19b16 100644 --- a/tangram/src/main/java/com/tmall/wireless/tangram/DefaultResolverRegistry.java +++ b/tangram/src/main/java/com/tmall/wireless/tangram/DefaultResolverRegistry.java @@ -25,8 +25,6 @@ package com.tmall.wireless.tangram; import android.support.annotation.NonNull; -import android.support.v4.util.ArrayMap; -import android.util.SparseArray; import android.view.View; import com.tmall.wireless.tangram.dataparser.concrete.BaseCardBinderResolver; @@ -38,6 +36,8 @@ import com.tmall.wireless.tangram.structure.BaseCell; import com.tmall.wireless.tangram.structure.card.VVCard; import com.tmall.wireless.tangram.structure.viewcreator.ViewHolderCreator; +import java.util.concurrent.ConcurrentHashMap; + /** * The place to register cell and card, all build-in and user cell, card ared registed here finally. */ @@ -47,7 +47,7 @@ public class DefaultResolverRegistry { final BaseCellBinderResolver mDefaultCellBinderResolver = new BaseCellBinderResolver(); final BaseCardBinderResolver mDefaultCardBinderResolver = new BaseCardBinderResolver(mDefaultCardResolver); - ArrayMap viewHolderMap = new ArrayMap<>(64); + ConcurrentHashMap viewHolderMap = new ConcurrentHashMap<>(64); MVHelper mMVHelper; diff --git a/tangram/src/main/java/com/tmall/wireless/tangram/MVHelper.java b/tangram/src/main/java/com/tmall/wireless/tangram/MVHelper.java index 56d2e2c..400d156 100644 --- a/tangram/src/main/java/com/tmall/wireless/tangram/MVHelper.java +++ b/tangram/src/main/java/com/tmall/wireless/tangram/MVHelper.java @@ -25,11 +25,11 @@ package com.tmall.wireless.tangram; import java.lang.reflect.Method; +import java.util.concurrent.ConcurrentHashMap; import com.alibaba.android.vlayout.VirtualLayoutManager; import android.os.Build.VERSION; -import android.support.v4.util.ArrayMap; import android.text.TextUtils; import android.view.View; import android.view.ViewGroup; @@ -63,11 +63,11 @@ public class MVHelper { private VafContext mVafContext; - private ArrayMap> methodMap = new ArrayMap<>(128); - private ArrayMap methodCacheMap = new ArrayMap<>(128); - private ArrayMap postBindMap = new ArrayMap<>(128); - private ArrayMap postUnBindMap = new ArrayMap<>(128); - private ArrayMap cellInitedMap = new ArrayMap<>(128); + private ConcurrentHashMap> methodMap = new ConcurrentHashMap<>(128); + private ConcurrentHashMap methodCacheMap = new ConcurrentHashMap<>(128); + private ConcurrentHashMap postBindMap = new ConcurrentHashMap<>(128); + private ConcurrentHashMap postUnBindMap = new ConcurrentHashMap<>(128); + private ConcurrentHashMap cellInitedMap = new ConcurrentHashMap<>(128); public MVHelper(MVResolver mvResolver) { this.mvResolver = mvResolver; @@ -188,7 +188,7 @@ public class MVHelper { return; } - ArrayMap paramMap = new ArrayMap<>(); + ConcurrentHashMap paramMap = new ConcurrentHashMap<>(); Method[] methods; if (methodCacheMap.get(view.getClass()) == null) { diff --git a/tangram/src/main/java/com/tmall/wireless/tangram/MVResolver.java b/tangram/src/main/java/com/tmall/wireless/tangram/MVResolver.java index 997dde1..d8732e7 100644 --- a/tangram/src/main/java/com/tmall/wireless/tangram/MVResolver.java +++ b/tangram/src/main/java/com/tmall/wireless/tangram/MVResolver.java @@ -25,9 +25,7 @@ package com.tmall.wireless.tangram; import android.support.annotation.Nullable; -import android.support.v4.util.ArrayMap; import android.text.TextUtils; -import android.util.SparseArray; import android.view.View; import com.tmall.wireless.tangram.core.service.ServiceManager; @@ -36,12 +34,12 @@ import com.tmall.wireless.tangram.dataparser.concrete.Style; import com.tmall.wireless.tangram.structure.BaseCell; import com.tmall.wireless.tangram.util.Utils; -import org.json.JSONException; import org.json.JSONObject; import java.util.HashMap; import java.util.Iterator; import java.util.List; +import java.util.concurrent.ConcurrentHashMap; /** * Created by mikeafc on 16/4/26. @@ -64,15 +62,15 @@ public class MVResolver { public static final String KEY_POSITION = "position"; - private ArrayMap> typeViewMap = new ArrayMap<>(64); + private ConcurrentHashMap> typeViewMap = new ConcurrentHashMap<>(64); - private ArrayMap> typeCellMap = new ArrayMap(64); + private ConcurrentHashMap> typeCellMap = new ConcurrentHashMap(64); - private HashMap idCardMap = new HashMap<>(); + private ConcurrentHashMap idCardMap = new ConcurrentHashMap<>(); - private ArrayMap mvMap = new ArrayMap<>(128); + private ConcurrentHashMap mvMap = new ConcurrentHashMap<>(128); - private ArrayMap vmMap = new ArrayMap<>(128); + private ConcurrentHashMap vmMap = new ConcurrentHashMap<>(128); private ServiceManager mServiceManager; diff --git a/tangram/src/main/java/com/tmall/wireless/tangram/core/resolver/BaseResolver.java b/tangram/src/main/java/com/tmall/wireless/tangram/core/resolver/BaseResolver.java index 8ee25ac..d0e4749 100644 --- a/tangram/src/main/java/com/tmall/wireless/tangram/core/resolver/BaseResolver.java +++ b/tangram/src/main/java/com/tmall/wireless/tangram/core/resolver/BaseResolver.java @@ -24,19 +24,16 @@ package com.tmall.wireless.tangram.core.resolver; -import android.support.v4.util.ArrayMap; -import android.util.SparseArray; - -import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; /** * Created by villadora on 15/8/23. */ public abstract class BaseResolver implements Resolver { - protected ArrayMap mMap = new ArrayMap<>(64); + protected ConcurrentHashMap mMap = new ConcurrentHashMap<>(64); - protected ArrayMap mSparseArray = new ArrayMap<>(64); + protected ConcurrentHashMap mSparseArray = new ConcurrentHashMap<>(64); @Override public int size() { diff --git a/tangram/src/main/java/com/tmall/wireless/tangram/dataparser/concrete/Card.java b/tangram/src/main/java/com/tmall/wireless/tangram/dataparser/concrete/Card.java index 0572833..3265820 100644 --- a/tangram/src/main/java/com/tmall/wireless/tangram/dataparser/concrete/Card.java +++ b/tangram/src/main/java/com/tmall/wireless/tangram/dataparser/concrete/Card.java @@ -30,8 +30,6 @@ import com.alibaba.android.vlayout.layout.BaseLayoutHelper; import com.alibaba.android.vlayout.layout.FixAreaLayoutHelper; import com.alibaba.android.vlayout.layout.MarginLayoutHelper; -import android.support.v4.util.ArrayMap; - import com.tmall.wireless.tangram.Engine; import com.tmall.wireless.tangram.MVHelper; import com.tmall.wireless.tangram.TangramBuilder; @@ -69,6 +67,7 @@ import java.util.Comparator; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; /** * Basic Card, which will represent LayoutHelpers @@ -124,7 +123,7 @@ public abstract class Card extends ComponentLifecycle { protected BaseCell mFooter; @NonNull - protected ArrayMap, Card> mChildren = new ArrayMap<>(); + protected ConcurrentHashMap, Card> mChildren = new ConcurrentHashMap<>(); @NonNull protected List mCells = new ArrayList<>(); @@ -580,7 +579,7 @@ public abstract class Card extends ComponentLifecycle { } @NonNull - public ArrayMap, Card> getChildren() { + public ConcurrentHashMap, Card> getChildren() { return mChildren; } @@ -1053,8 +1052,8 @@ public abstract class Card extends ComponentLifecycle { public Card findChildCardById(String id) { if (!mChildren.isEmpty()) { - for (int i = 0, size = mChildren.size(); i < size; i++) { - Card card = mChildren.valueAt(i); + for (Map.Entry, Card> entry : mChildren.entrySet()) { + Card card = entry.getValue(); if (card != null && card.id.equals(id)) { return card; } @@ -1063,7 +1062,7 @@ public abstract class Card extends ComponentLifecycle { return null; } - public ArrayMap, Card> getChildrenCards() { + public ConcurrentHashMap, Card> getChildrenCards() { return mChildren; } diff --git a/tangram/src/main/java/com/tmall/wireless/tangram/dataparser/concrete/PojoGroupBasicAdapter.java b/tangram/src/main/java/com/tmall/wireless/tangram/dataparser/concrete/PojoGroupBasicAdapter.java index 5187f5f..da34d53 100644 --- a/tangram/src/main/java/com/tmall/wireless/tangram/dataparser/concrete/PojoGroupBasicAdapter.java +++ b/tangram/src/main/java/com/tmall/wireless/tangram/dataparser/concrete/PojoGroupBasicAdapter.java @@ -38,7 +38,6 @@ import com.tmall.wireless.tangram.structure.BaseCell; import android.content.Context; import android.support.annotation.NonNull; import android.support.annotation.Nullable; -import android.support.v4.util.ArrayMap; import android.text.TextUtils; import android.util.Pair; import android.util.SparseArray; @@ -54,6 +53,7 @@ import java.util.Collections; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicInteger; /** @@ -66,7 +66,7 @@ public class PojoGroupBasicAdapter extends GroupBasicAdapter { private AtomicInteger mTypeId = new AtomicInteger(0); - private final Map mStrKeys = new ArrayMap<>(64); + private final Map mStrKeys = new ConcurrentHashMap<>(64); private MVHelper mMvHelper; @@ -255,7 +255,7 @@ public class PojoGroupBasicAdapter extends GroupBasicAdapter { } - private final Map mIdCardCache = new ArrayMap<>(64); + private final Map mIdCardCache = new ConcurrentHashMap<>(64); @NonNull @Override diff --git a/tangram/src/main/java/com/tmall/wireless/tangram/eventbus/BusSupport.java b/tangram/src/main/java/com/tmall/wireless/tangram/eventbus/BusSupport.java index 1e79797..700d66f 100644 --- a/tangram/src/main/java/com/tmall/wireless/tangram/eventbus/BusSupport.java +++ b/tangram/src/main/java/com/tmall/wireless/tangram/eventbus/BusSupport.java @@ -27,7 +27,6 @@ package com.tmall.wireless.tangram.eventbus; import org.json.JSONObject; import android.support.annotation.NonNull; -import android.support.v4.util.ArrayMap; import android.text.TextUtils; import java.util.ArrayList; @@ -148,7 +147,7 @@ public class BusSupport implements IDispatcherDelegate { * returned object's field is filled provided params. */ public static Event obtainEvent(String type, String sourceId, - ArrayMap args, EventContext eventContext) { + ConcurrentHashMap args, EventContext eventContext) { Event event = EventPool.sharedInstance().acquire(); event.type = type; event.sourceId = sourceId; diff --git a/tangram/src/main/java/com/tmall/wireless/tangram/eventbus/Event.java b/tangram/src/main/java/com/tmall/wireless/tangram/eventbus/Event.java index 6ac9c8a..79ae10b 100644 --- a/tangram/src/main/java/com/tmall/wireless/tangram/eventbus/Event.java +++ b/tangram/src/main/java/com/tmall/wireless/tangram/eventbus/Event.java @@ -24,7 +24,7 @@ package com.tmall.wireless.tangram.eventbus; -import android.support.v4.util.ArrayMap; +import java.util.concurrent.ConcurrentHashMap; /** * Created by longerian on 16/4/26. @@ -44,7 +44,7 @@ public class Event { /** * TangramOp1 args */ - public ArrayMap args; + public ConcurrentHashMap args; /** * Context @@ -52,7 +52,7 @@ public class Event { public EventContext eventContext; public Event() { - args = new ArrayMap<>(); + args = new ConcurrentHashMap<>(); } /** diff --git a/tangram/src/main/java/com/tmall/wireless/tangram/structure/BaseCell.java b/tangram/src/main/java/com/tmall/wireless/tangram/structure/BaseCell.java index 7be5b3e..2a62228 100644 --- a/tangram/src/main/java/com/tmall/wireless/tangram/structure/BaseCell.java +++ b/tangram/src/main/java/com/tmall/wireless/tangram/structure/BaseCell.java @@ -25,11 +25,11 @@ package com.tmall.wireless.tangram.structure; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicLong; import android.support.annotation.NonNull; import android.support.annotation.Nullable; -import android.support.v4.util.ArrayMap; import android.util.SparseArray; import android.view.View; import android.widget.ImageView; @@ -123,9 +123,9 @@ public class BaseCell extends ComponentLifecycle implements View */ public JSONObject extras = new JSONObject(); - private ArrayMap bizParaMap = new ArrayMap<>(32); + private ConcurrentHashMap bizParaMap = new ConcurrentHashMap<>(32); - private ArrayMap innerClickMap = new ArrayMap<>(); + private ConcurrentHashMap innerClickMap = new ConcurrentHashMap<>(); @Nullable public ServiceManager serviceManager; @@ -366,9 +366,9 @@ public class BaseCell extends ComponentLifecycle implements View return null; } - private ArrayMap mRxExposureEvents = new ArrayMap<>(); + private ConcurrentHashMap mRxExposureEvents = new ConcurrentHashMap<>(); - private ArrayMap mViewExposureObservables = new ArrayMap<>(); + private ConcurrentHashMap mViewExposureObservables = new ConcurrentHashMap<>(); /** * @param targetView @@ -403,9 +403,9 @@ public class BaseCell extends ComponentLifecycle implements View return exposure(targetView, rxExposureEvent); } - private ArrayMap mRxClickEvents = new ArrayMap<>(); + private ConcurrentHashMap mRxClickEvents = new ConcurrentHashMap<>(); - private ArrayMap mViewClickObservables = new ArrayMap<>(); + private ConcurrentHashMap mViewClickObservables = new ConcurrentHashMap<>(); /** * @param view diff --git a/tangram/src/main/java/com/tmall/wireless/tangram/structure/card/GridCard.java b/tangram/src/main/java/com/tmall/wireless/tangram/structure/card/GridCard.java index 0546ae4..cc8fe3d 100644 --- a/tangram/src/main/java/com/tmall/wireless/tangram/structure/card/GridCard.java +++ b/tangram/src/main/java/com/tmall/wireless/tangram/structure/card/GridCard.java @@ -26,10 +26,9 @@ package com.tmall.wireless.tangram.structure.card; import android.support.annotation.NonNull; import android.support.annotation.Nullable; -import android.support.v4.util.ArrayMap; -import android.support.v4.util.SimpleArrayMap; import android.text.TextUtils; import android.util.Log; +import android.view.View; import com.alibaba.android.vlayout.LayoutHelper; import com.alibaba.android.vlayout.Range; @@ -37,19 +36,19 @@ import com.alibaba.android.vlayout.layout.BaseLayoutHelper; import com.alibaba.android.vlayout.layout.GridLayoutHelper; import com.alibaba.android.vlayout.layout.RangeGridLayoutHelper; import com.alibaba.android.vlayout.layout.RangeGridLayoutHelper.GridRangeStyle; - -import android.view.View; import com.tmall.wireless.tangram.MVHelper; import com.tmall.wireless.tangram.dataparser.concrete.Card; import com.tmall.wireless.tangram.dataparser.concrete.Style; import com.tmall.wireless.tangram.structure.BaseCell; - import com.tmall.wireless.tangram.support.CardSupport; + import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; /** * Card perform grid layout @@ -102,28 +101,28 @@ public class GridCard extends Card { if (anchorCard == null) { return; } - ArrayMap, Card> newChildren = new ArrayMap<>(); + ConcurrentHashMap, Card> newChildren = new ConcurrentHashMap<>(); boolean startOffset = false; - for (int i = 0, size = mChildren.size(); i < size; i++) { - Range key = mChildren.keyAt(i); - Card child = mChildren.valueAt(i); + for (Map.Entry, Card> entry : mChildren.entrySet()) { + Range key = entry.getKey(); + Card child = entry.getValue(); if (child == anchorCard) { Range newKey = Range.create(key.getLower().intValue(), - key.getUpper().intValue() + offset); + key.getUpper().intValue() + offset); newChildren.put(newKey, child); startOffset = true; continue; } if (startOffset) { Range newKey = Range.create(key.getLower().intValue() + offset, - key.getUpper().intValue() + offset); + key.getUpper().intValue() + offset); newChildren.put(newKey, child); } else { newChildren.put(key, child); } } mChildren.clear(); - mChildren.putAll((SimpleArrayMap, ? extends Card>)newChildren); + mChildren.putAll(newChildren); } @Override @@ -193,9 +192,9 @@ public class GridCard extends Card { } private void convertChildLayoutHelper(@Nullable RangeGridLayoutHelper gridHelper, GridCard parentCard) { - for (int i = 0, size = parentCard.getChildren().size(); i < size; i++) { - Range range = parentCard.getChildren().keyAt(i); - Card child = parentCard.getChildren().valueAt(i); + for (Map.Entry, Card> entry : parentCard.getChildren().entrySet()) { + Range range = entry.getKey(); + Card child = entry.getValue(); Style style = child.style; if (style instanceof GridStyle && child instanceof GridCard) { final GridStyle gridStyle = (GridStyle) style; @@ -228,9 +227,9 @@ public class GridCard extends Card { rangeStyle.setBgColor(style.bgColor); rangeStyle.setMargin(style.margin[Style.MARGIN_LEFT_INDEX], style.margin[Style.MARGIN_TOP_INDEX], - style.margin[Style.MARGIN_RIGHT_INDEX], style.margin[Style.MARGIN_BOTTOM_INDEX]); + style.margin[Style.MARGIN_RIGHT_INDEX], style.margin[Style.MARGIN_BOTTOM_INDEX]); rangeStyle.setPadding(style.padding[Style.MARGIN_LEFT_INDEX], style.padding[Style.MARGIN_TOP_INDEX], - style.padding[Style.MARGIN_RIGHT_INDEX], style.padding[Style.MARGIN_BOTTOM_INDEX]); + style.padding[Style.MARGIN_RIGHT_INDEX], style.padding[Style.MARGIN_BOTTOM_INDEX]); if (!TextUtils.isEmpty(style.bgImgUrl)) { if (serviceManager != null && serviceManager.getService(CardSupport.class) != null) { final CardSupport support = serviceManager.getService(CardSupport.class); diff --git a/tangram/src/main/java/com/tmall/wireless/tangram/structure/card/SlideCard.java b/tangram/src/main/java/com/tmall/wireless/tangram/structure/card/SlideCard.java index 559c05d..5192cb9 100644 --- a/tangram/src/main/java/com/tmall/wireless/tangram/structure/card/SlideCard.java +++ b/tangram/src/main/java/com/tmall/wireless/tangram/structure/card/SlideCard.java @@ -33,13 +33,12 @@ import com.tmall.wireless.tangram.structure.BaseCell; import android.support.annotation.Keep; import android.support.annotation.NonNull; -import android.support.v4.util.ArrayMap; -import android.util.Log; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; /** * Created by longerian on 17/1/27. @@ -51,7 +50,7 @@ public class SlideCard extends WrapperCard implements SwipeCard { public static final String KEY_PAGE_COUNT = "pageCount"; - private ArrayMap args = new ArrayMap(); + private ConcurrentHashMap args = new ConcurrentHashMap(); private int mIndex; diff --git a/tangram/src/main/java/com/tmall/wireless/tangram/support/BannerSupport.java b/tangram/src/main/java/com/tmall/wireless/tangram/support/BannerSupport.java index ca6b40e..744fa1b 100644 --- a/tangram/src/main/java/com/tmall/wireless/tangram/support/BannerSupport.java +++ b/tangram/src/main/java/com/tmall/wireless/tangram/support/BannerSupport.java @@ -26,8 +26,8 @@ package com.tmall.wireless.tangram.support; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ConcurrentHashMap; -import android.support.v4.util.ArrayMap; import com.tmall.wireless.tangram.ext.BannerListener; import com.tmall.wireless.tangram.support.RxBannerScrolledListener.ScrollEvent; import io.reactivex.Observable; @@ -38,11 +38,11 @@ import io.reactivex.Observable; */ public class BannerSupport { - private ArrayMap> mSelectedListenerArrayMap = new ArrayMap<>(); + private ConcurrentHashMap> mSelectedListenerArrayMap = new ConcurrentHashMap<>(); - private ArrayMap> mScrolledListenerArrayMap = new ArrayMap<>(); + private ConcurrentHashMap> mScrolledListenerArrayMap = new ConcurrentHashMap<>(); - private ArrayMap> mScrollStateListenerArrayMap = new ArrayMap<>(); + private ConcurrentHashMap> mScrollStateListenerArrayMap = new ConcurrentHashMap<>(); @Deprecated private List listeners = new ArrayList(); diff --git a/tangram/src/main/java/com/tmall/wireless/tangram/support/ExposureSupport.java b/tangram/src/main/java/com/tmall/wireless/tangram/support/ExposureSupport.java index 07ee662..dea41e6 100644 --- a/tangram/src/main/java/com/tmall/wireless/tangram/support/ExposureSupport.java +++ b/tangram/src/main/java/com/tmall/wireless/tangram/support/ExposureSupport.java @@ -32,7 +32,6 @@ import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import android.support.annotation.NonNull; -import android.support.v4.util.ArrayMap; import android.util.Log; import android.view.View; import com.tmall.wireless.tangram.dataparser.concrete.Card; @@ -80,8 +79,8 @@ public abstract class ExposureSupport { private static final int MODIFIERS_IGNORE = Modifier.ABSTRACT | Modifier.STATIC | BRIDGE | SYNTHETIC; - private final Map, OnTraceMethod> mOnTraceMethods = new ArrayMap<>(); - private final Map, OnTraceMethod> mOnExposureMethods = new ArrayMap<>(); + private final Map, OnTraceMethod> mOnTraceMethods = new ConcurrentHashMap<>(); + private final Map, OnTraceMethod> mOnExposureMethods = new ConcurrentHashMap<>(); private boolean optimizedMode; diff --git a/tangram/src/main/java/com/tmall/wireless/tangram/support/RxTimer.java b/tangram/src/main/java/com/tmall/wireless/tangram/support/RxTimer.java index 2eeeb94..c1c792e 100644 --- a/tangram/src/main/java/com/tmall/wireless/tangram/support/RxTimer.java +++ b/tangram/src/main/java/com/tmall/wireless/tangram/support/RxTimer.java @@ -24,13 +24,16 @@ package com.tmall.wireless.tangram.support; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; import android.support.annotation.NonNull; -import android.support.v4.util.ArrayMap; import android.util.Log; + import com.tmall.wireless.tangram.support.HandlerTimer.TimerStatus; import com.tmall.wireless.tangram.support.TimerSupport.OnTickListener; + import io.reactivex.Observable; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; @@ -55,57 +58,57 @@ public class RxTimer implements ITimer { private Observable mIntervalObservable; - private ArrayMap tickCache = new ArrayMap<>(); + private ConcurrentHashMap tickCache = new ConcurrentHashMap<>(); public RxTimer(long interval) { this.mInterval = interval; this.mStatus = TimerStatus.Waiting; this.mIntervalObservable = Observable - .interval(0, this.mInterval, TimeUnit.MILLISECONDS) - .doOnSubscribe(new Consumer() { - @Override - public void accept(Disposable disposable) throws Exception { - mStatus = TimerStatus.Running; - Log.d("RxTimerSupportTest", "accept " + disposable + " status " + mStatus); - } - }) - .doOnDispose(new Action() { - @Override - public void run() throws Exception { - mStatus = TimerStatus.Paused; - Log.d("RxTimerSupportTest", "on dispose " + " status " + mStatus); - } - }) - .doOnTerminate(new Action() { - @Override - public void run() throws Exception { - mStatus = TimerStatus.Stopped; - Log.d("RxTimerSupportTest", "on terminate " + " status " + mStatus); - } - }) - .share(); + .interval(0, this.mInterval, TimeUnit.MILLISECONDS) + .doOnSubscribe(new Consumer() { + @Override + public void accept(Disposable disposable) throws Exception { + mStatus = TimerStatus.Running; + Log.d("RxTimerSupportTest", "accept " + disposable + " status " + mStatus); + } + }) + .doOnDispose(new Action() { + @Override + public void run() throws Exception { + mStatus = TimerStatus.Paused; + Log.d("RxTimerSupportTest", "on dispose " + " status " + mStatus); + } + }) + .doOnTerminate(new Action() { + @Override + public void run() throws Exception { + mStatus = TimerStatus.Stopped; + Log.d("RxTimerSupportTest", "on terminate " + " status " + mStatus); + } + }) + .share(); } public void register(final int interval, @NonNull final OnTickListener onTickListener, boolean intermediate) { Disposable disposable = this.mIntervalObservable.delaySubscription(intermediate ? 0 : interval * mInterval, TimeUnit.MILLISECONDS).skipWhile( - new Predicate() { - @Override - public boolean test(Long aLong) throws Exception { - return pause; - } - }).observeOn( - AndroidSchedulers.mainThread()).subscribe(new Consumer() { + new Predicate() { + @Override + public boolean test(Long aLong) throws Exception { + return pause; + } + }).observeOn( + AndroidSchedulers.mainThread()).subscribe(new Consumer() { - @Override - public void accept(Long count) throws Exception { - Log.d("RxTimerSupportTest", "accept " + " value " + count); - if (count % interval == 0) { - if (onTickListener != null) { - onTickListener.onTick(); - } + @Override + public void accept(Long count) throws Exception { + Log.d("RxTimerSupportTest", "accept " + " value " + count); + if (count % interval == 0) { + if (onTickListener != null) { + onTickListener.onTick(); } } + } }); tickCache.put(onTickListener, disposable); } @@ -148,8 +151,8 @@ public class RxTimer implements ITimer { @Override public void stop() { - for (int i = 0, size = tickCache.size(); i < size; i++) { - Disposable disposable = tickCache.valueAt(i); + for (Map.Entry entry : tickCache.entrySet()) { + Disposable disposable = entry.getValue(); disposable.dispose(); } tickCache.clear(); diff --git a/tangram/src/main/java/com/tmall/wireless/tangram/support/SimpleClickSupport.java b/tangram/src/main/java/com/tmall/wireless/tangram/support/SimpleClickSupport.java index e5735fd..540d032 100644 --- a/tangram/src/main/java/com/tmall/wireless/tangram/support/SimpleClickSupport.java +++ b/tangram/src/main/java/com/tmall/wireless/tangram/support/SimpleClickSupport.java @@ -31,7 +31,6 @@ import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -import android.support.v4.util.ArrayMap; import android.util.Log; import android.view.View; import com.tmall.wireless.tangram.dataparser.concrete.Cell; @@ -66,7 +65,7 @@ public abstract class SimpleClickSupport { private static final int MODIFIERS_IGNORE = Modifier.ABSTRACT | Modifier.STATIC | BRIDGE | SYNTHETIC; - private final Map, OnClickMethod> mOnClickMethods = new ArrayMap<>(); + private final Map, OnClickMethod> mOnClickMethods = new ConcurrentHashMap<>(); private boolean optimizedMode; diff --git a/tangram/src/main/java/com/tmall/wireless/tangram/util/Utils.java b/tangram/src/main/java/com/tmall/wireless/tangram/util/Utils.java index 6122a17..6ad9806 100644 --- a/tangram/src/main/java/com/tmall/wireless/tangram/util/Utils.java +++ b/tangram/src/main/java/com/tmall/wireless/tangram/util/Utils.java @@ -24,20 +24,16 @@ package com.tmall.wireless.tangram.util; +import android.text.TextUtils; +import android.util.Log; +import android.util.Pair; + import com.tmall.wireless.tangram.TangramBuilder; import org.json.JSONObject; -import android.support.v4.util.ArrayMap; -import android.text.TextUtils; -import android.util.Log; -import android.util.Pair; -import android.util.SparseBooleanArray; -import android.util.SparseIntArray; - -import java.util.ArrayList; -import java.util.List; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -51,7 +47,7 @@ public class Utils { private static final Pattern REGEX_2 = Pattern.compile("(\\d+)-(\\d+)(_?q\\d+)?(\\.[jpg|png|gif])"); public static Map newMap(K k1, V v1, K k2, V v2) { - ArrayMap map = new ArrayMap<>(); + ConcurrentHashMap map = new ConcurrentHashMap<>(); map.put(k1, v1); map.put(k2, v2); return map; @@ -116,7 +112,7 @@ public class Utils { return Float.NaN; } - private static ArrayMap> imageSizeMap = new ArrayMap<>(); + private static ConcurrentHashMap> imageSizeMap = new ConcurrentHashMap<>(); /** *