经过这边文章,可能很多人之前用到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,"哈哈!中国~");
接收值:RxBus.getRxBus(message -> Log.e("Rxbus",message));
哈哈,是不是很简单。完全不需要注解啊。。 不过最后哦,记得把订阅事件取消掉哦!