超简单RxBus

1.RxBus.java

public class RxBus { //单例模式,双重检查模式DCL
    private static volatile RxBus rxBus;
    private final rx.subjects.Subject subject = new SerializedSubject<>(PublishSubject.create());
    private RxBus(){}

    public static RxBus getRxBus (){ //单例模式,双重检查模式DCL
        if (rxBus == null){
            synchronized (RxBus.class) {
                if (rxBus == null) {
                    rxBus = new RxBus();
                }
            }
        }
        return rxBus; //既可当作被观察发布数据  (,也可以当观察者处理得到的数据,)
    }

    public void post(Object ob) { //被观察者发布数据
        subject.onNext(ob);
    }

    //第一个T表示是泛型方法,必须在返回值前加 第二个T表示返回值
    public  Observable tObservable(Class eventType) {
        return subject.ofType(eventType); //oftype发送指定类型的数据
    }

} 
  

2.发布-订阅代码

tdbus = (Button) findViewById(R.id.tdbus);
    tdbus.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (i == 0) {
                Message msg = new Message();
                msg.what = 0;
                msg.obj = "欢迎来到我的博客000";
                RxBus.getRxBus().post(msg);
                i = 1;
            } else if (i == 1){
                Message msg = new Message();
                msg.what = 1;
                msg.obj = "欢迎来到我的博客111";
                RxBus.getRxBus().post(msg);
                i = 0;
            }
        }
    });

    //下面这个响应事件可以写到另外一个ACTIVITY
    subscription = RxBus.getRxBus().tObservable(Message.class) //得到observable
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Action1() { //subscribe方法得到一个subscription
        @Override
        public void call(Message message) {
            int waht = message.what;
            String msg = (String) message.obj;
            if (waht == 1 ||waht == 2) {
                sb.append(msg + "\n");
                xianshi.setText(sb.toString());
            }
        }
    }); //要记得取消订阅,防止内存泄漏

    //实测在另外一个activity搜不到数据
    Button two = (Button) findViewById(R.id.two);
    two.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Message msg = new Message();
            msg.what = 2;
            msg.obj = "欢迎来到我的博客222";
            RxBus.getRxBus().post(msg);
            startActivity(new Intent(MainActivity.this , ActivityTwo.class)); //另外一个ACTIVITY也可以得到数据
        }
    });

}

@Override
protected void onDestroy() {
    super.onDestroy();
    if (subscription != null && !subscription.isUnsubscribed())
    subscription.unsubscribe(); //取消订阅
}



你可能感兴趣的:(超简单RxBus)