package com.arialyy.frame.core; import android.util.SparseArray; import com.arialyy.frame.util.ReflectionUtil; /** * Created by lyy on 2016/4/5. * 更新帮助类 */ public class NotifyHelp { private static volatile NotifyHelp INSTANCE = null; private static final Object LOCK = new Object(); private SparseArray<SparseArray<OnNotifyCallback>> mNotifyObjs = new SparseArray<>(); public interface OnNotifyCallback { public void onNotify(int action, Object obj); } public static NotifyHelp getInstance() { if (INSTANCE == null) { synchronized (LOCK) { INSTANCE = new NotifyHelp(); } } return INSTANCE; } private NotifyHelp() { } public void addObj(int flag, OnNotifyCallback callback) { SparseArray<OnNotifyCallback> array = mNotifyObjs.get(flag); if (array == null) { array = new SparseArray<>(); } array.put(callback.hashCode(), callback); mNotifyObjs.put(flag, array); } public void removeObj(int flag) { mNotifyObjs.delete(flag); } public void clear() { mNotifyObjs.clear(); } public void update(int flag) { update(flag, -1, null); } public void update(int flag, int action) { update(flag, action, null); } public void update(int flag, int action, Object obj) { if (mNotifyObjs == null || mNotifyObjs.size() == 0) { return; } SparseArray<OnNotifyCallback> array = mNotifyObjs.get(flag); if (array == null || array.size() == 0) { return; } try { int[] keys = (int[]) ReflectionUtil.getField(SparseArray.class, "mKeys").get(array); for (int key : keys) { if (key == 0) { continue; } OnNotifyCallback callback = array.get(key); if (callback != null) { callback.onNotify(action, obj); } } } catch (IllegalAccessException e) { e.printStackTrace(); } } }