經過這邊文章,可能很多人之前用到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));
哈哈,是不是很簡單。完全不需要註解啊。。 不過最後哦,記得把訂閱事件取消掉哦!