hxb
2022-03-21 0188dee359636723190f0f67a6b674b7b08f7bef
HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/event/EventDispatcher.java
@@ -18,6 +18,8 @@
 */
public class EventDispatcher {
    private static final List<EventListener> ALL_TOPICS_EVENT = new ArrayList<>();//所有主题消息
    private static final ArrayMap<Object, List<EventListener>> EVENT = new ArrayMap<>();
    private static final ArrayMap<EventListener, Integer> TYPE = new ArrayMap<>();
@@ -25,7 +27,7 @@
    private static final int MAIN_TYPE = 0;
    private static final int IO_TYPE = 1;
    private static final ExecutorService ioThread = ThreadToolUtils.getInstance().newFixedThreadPool(2);
    private static final ExecutorService ioThread = ThreadToolUtils.getInstance().newFixedThreadPool(3);
    private EventDispatcher() {
    }
@@ -61,44 +63,50 @@
    }
    public synchronized void remove(Object tag) {
        ioThread.execute(new Runnable() {
            @Override
            public void run() {
                try {
                    if (EVENT.containsKey(tag)) {
                        List<EventListener> list = EVENT.get(tag);
                        for (EventListener eventListener : list) {
                            TYPE.remove(eventListener);
        try {
            ioThread.execute(new Runnable() {
                @Override
                public void run() {
                    try {
                        if (EVENT.containsKey(tag)) {
                            List<EventListener> list = EVENT.get(tag);
                            for (EventListener eventListener : list) {
                                TYPE.remove(eventListener);
                            }
                            EVENT.remove(tag);
                        }
                        EVENT.remove(tag);
                    } catch (Exception ignored) {
                    }
                } catch (Exception ignored) {
                }
            }
        });
            });
        }catch (Exception e){}
    }
    public synchronized void remove(Object tag, EventListener listener) {
        ioThread.execute(new Runnable() {
            @Override
            public void run() {
                try {
                    if (EVENT.containsKey(tag)) {
                        List<EventListener> ev = EVENT.get(tag);
                        if (ev != null && !ev.isEmpty()) {
                            TYPE.remove(listener);
                            ev.remove(listener);
        try {
            ioThread.execute(new Runnable() {
                @Override
                public void run() {
                    try {
                        if (EVENT.containsKey(tag)) {
                            List<EventListener> ev = EVENT.get(tag);
                            if (ev != null && !ev.isEmpty()) {
                                TYPE.remove(listener);
                                ev.remove(listener);
                            }
                        }
                    } catch (Exception ignored) {
                    }
                } catch (Exception ignored) {
                }
            }
        });
            });
        }catch (Exception e){}
    }
    public synchronized void post(Object tag, @NonNull Object o) {
        if (EVENT.containsKey(tag)) {
@@ -116,9 +124,57 @@
                }
            }
        }
        //所有主题的Listener通知
        if (ALL_TOPICS_EVENT != null && !ALL_TOPICS_EVENT.isEmpty()) {
            for (EventListener listener : ALL_TOPICS_EVENT) {
                ThreadToolUtils.getInstance().runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        if (listener != null) {
                            listener.onMessage(o);
                        }
                    }
                });
            }
        }
    }
    /**
     * 注册所有主题消息的监听
     * @param listener
     */
    public synchronized void registerAllTopicsListener(EventListener listener) {
        if (ALL_TOPICS_EVENT != null && !ALL_TOPICS_EVENT.contains(listener)) {
            ALL_TOPICS_EVENT.add(listener);
        }
        TYPE.put(listener, MAIN_TYPE);
    }
    /**
     * 取消所有主题消息的监听
     * @param listener
     */
    public synchronized void removeAllTopicsListener(EventListener listener) {
        try {
            ioThread.execute(new Runnable() {
                @Override
                public void run() {
                    try {
                        if (ALL_TOPICS_EVENT != null && !ALL_TOPICS_EVENT.isEmpty()) {
                            TYPE.remove(listener);
                            ALL_TOPICS_EVENT.remove(listener);
                        }
                    } catch (Exception ignored) {
                    }
                }
            });
        }catch (Exception e){}
    }
    public synchronized void clear() {
        ALL_TOPICS_EVENT.clear();
        EVENT.clear();
        TYPE.clear();
    }