【Android】EventBus使用関連

11060 ワード

【Android】EventBus使用関連
EventBusの使用は非常に簡単で、主に以下の3つの方法に使われています.
 //  EventBus
    EventBus.getDefault().register(Object subscriber);
    //        
    @Subscribe
    public void onEventXXX(Object event){
        //    
    ...
    }
    //    
    EventBus.getDefault().post(Object event);
    //  EventBus
    EventBus.getDefault().unregister(Object subscriber);

注意して使用しています
EventManager'管理クラスを作成し、イベント登録が必要なクラスの購読方法があるかどうかをEventManagerで判断します.
public static boolean isBindEventBus(Class clazz) {
    Method[] ms = clazz.getDeclaredMethods();
    for (Method m : ms) {
        if (m.isAnnotationPresent(Subscribe.class)) {
            return true;
        }
    }
    return false;
}
管理クラスコード:
public class EventManager {

    private static EventManager sInstance = new EventManager();
    private static EventBus mEventBus;

    private EventManager() {
        mEventBus = new CustomEventBus();
    }

    public static EventManager getsInstance() {
        return sInstance;
    }

    public void post(Object event) {
        mEventBus.post(event);
    }

    public void postSticky(Object event) {
        mEventBus.postSticky(event);
    }

    public void register(Object event) {
        mEventBus.register(event);
    }

    public void unRegister(Object event) {
        mEventBus.unregister(event);
    }

    /**
     *                      
     *
     * @param clazz
     * @return
     */
    public static boolean isBindEventBus(Class clazz) {
        Method[] ms = clazz.getDeclaredMethods();
        for (Method m : ms) {
            if (m.isAnnotationPresent(Subscribe.class)) {
                return true;
            }
        }
        return false;
    }

    static final class CustomEventBus extends EventBus {
        @Override
        public void register(Object subscriber) {
            if (!isRegistered(subscriber)) {
                super.register(subscriber);
            }
        }
    }
}