如何用RXjava 替換EventBus 通信方案

經過這邊文章,可能很多人之前用到intent傳值 ,以及Eventbus傳值,針對Eventbus傳值呢 可能註解多,然後有去無回 類似單向傳遞值,接下來,我們來了解下 RXjava :大體實現如下

public class RxBus {

    private   static   volatile  RxBus  rxBus;
    private  final PublishSubject<Object>  mRxtBus =PublishSubject.create();
    public static RxBus getRxBus(){
        //加上線程同步鎖
        synchronized (RxBus.class){
            if (rxBus==null){
                rxBus=new RxBus();
            }
        }
        return rxBus;
    }

    //重寫發送帶Tag值得可以進行比對
    public void post(int tag,Object event){
        //用Message進行封裝  這是自己封裝的內部類
        Message msg = new Message(tag,event);
        mRxtBus.onNext(msg);
    }
    //創建接受時間的方法
    public <T> Observable<T> toEvent(Class<T> eventType){
        return mRxtBus.ofType(eventType);
    }
    //自己封裝的傳送數據的Bean類
    public class Message{
        private int tag;
        private Object event;
        public Message() {
        }

        public int getTag() {
            return tag;
        }

        public void setTag(int tag) {
            this.tag = tag;
        }

        public Object getEvent() {
            return event;
        }

        public void setEvent(Object event) {
            this.event = event;
        }
        public Message(int tag,Object event){
            this.tag=tag;
            this.event=event;
        }
    }

}

經過調用呢,也是可以達到Eventbus的功能,代碼看起來很優雅 ,如果不夠優雅,那這樣呢:
傳值 RxBus.getRxBus().post(2,"哈哈!中國~");

接收值:AppUtis.getRxBus(message -> Log.e("Rxbus",message));
哈哈,是不是很簡單。完全不需要註解啊。。 不過最後哦,記得把訂閱事件取消掉哦!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章