zoukankan      html  css  js  c++  java
  • 《Android进阶之光》--RxJava实现RxBus

    事件总线RxBus,替代EventBus和otto

    1)创建RxBus

    public class RxBus{
        private static volatile RxBus rxBus;
        private final Subject<Object,Object> subject = new SerializedSubject<>(PublishSubject.create());
        private RxBus(){
        }
        public static RxBus getInstance(){
            if(rxBus == null){
                synchronized(RxBus.class){
                    if(rxBus == null){
                        rxBus = new RxBus();
                    }
                }
            }
            return rxBus;
        }
        public void post(Object ob){
            subject.onNext(ob);
        }
        public <T> Observalbe<T> toObservable(Class<T> eventType){
            return subject.ofType(eventType);
        }
    }
    public final <R> Observable<R> ofType(final Class<R> klass){
        return filter(InternalObservableUtils.isInstanceOf(klass)).cast(klass);
    }

    2)发送事件

    public class RxBusActivity extends AppComaptActivity{
        private Button bt_post;
        @Override
        protected void onCreate(Bundle savedInstanceState){
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_rx_bus);
            bt_post = (Button)this.findViewById(R.id.bt_post);
            bt_post.setOnClickListener(new View.OnClickListener(){
                @Override
                public void onClick(View v){
                    RxBus.getInstance().post(new MessageEvent("用RxJava实现RxBus"));
                }
            });
        }
    }

    3)接收事件

    public class RxBusFragment extends Fragment{
        ...
        @Override
        public void onActivityCreated(@Nullable Bundle savedInstanceState){
            super.onActivityCreated(savedInstanceState);
            subscription = RxBus.getInstance().toObservable(MessageEvent.class).subscribe(new Action1<MessageEvent>(){
                @Override
                public void call(MessageEvent messageEvent){
                    if(messageEvent!=null){
                        tv_text.setText(messageEvent.getMessage());
                    }
                }
            });
        }
    }

    4)取消订阅事件

    @Override
    public void onDestroy(){
        super.onDestroy();
        if(subscription!=null&&!subscription.isUnsubscribed()){
            subscription.unsubscribe();
        }
    }
  • 相关阅读:
    【洛谷P2860】冗余路径
    【CF1042D】Petya and Array 离散化+树状数组
    【洛谷P2127】序列排序
    【洛谷P4462】异或序列
    【SPOJ10707】COT2
    【CF1119D】Frets On Fire
    【CF1119E】Pavel and Triangles
    【洛谷P1903】数颜色
    hdu 3488(KM算法||最小费用最大流)
    hdu 1853(拆点判环+费用流)
  • 原文地址:https://www.cnblogs.com/anni-qianqian/p/8550194.html
Copyright © 2011-2022 走看看