加入JakeWharton大神的RxRelay
JakeWharton/RxRelay
compile 'com.jakewharton.rxrelay2:rxrelay:2.0.0'
RxBus.java
/**
* If you have any questions, you can contact by email {[email protected]}
* @author 王诛魔 2017/11/30 下午6:09
*
*/
public class RxBus {
private Relay
还有一个通用的Event.java
依据自己的需要制定即可
/**
* If you have any questions, you can contact by email {[email protected]}
* @author 王诛魔 2017/10/19 下午5:38
*
* 发送事件包装类
*/
public class Event {
public static final int EVENT_CLOSE_ALL_ACTIVITY = 10001;
/**
* reserved data
*/
private T data;
/**
* this code distinguish between different events
*/
private int eventCode = -1;
public Event(int eventCode) {
this(eventCode, null);
}
public Event(int eventCode, T data) {
this.eventCode = eventCode;
this.data = data;
}
/**
* get event code
*
* @return
*/
public int getCode() {
return this.eventCode;
}
/**
* get event reserved data
*
* @return
*/
public T getData() {
return this.data;
}
}
RxBus的使用
注册
最好是再基类中,加上.
if (useEventBus()) {
//注册eventbus
Disposable disposable = RxBus.getDefault()
.register(Event.class, new Consumer() {
@Override
public void accept(Event event) {
int eventCode = event.getCode();
Log.e("RxBus", event.toString());
switch (eventCode) {
case Event.EVENT_CLOSE_ALL_ACTIVITY:
break;
default:
onEvent(event);
break;
}
}
});
addDispose(disposable);
}
其中:
useEventBus()
由子类实现,是否开启RxBus,避免浪费addDispose(disposable);
addDispose 是基类的方法
/**
* RxJava 添加订阅
*/
protected void addDispose(Disposable disposable) {
if (mDisposables == null) {
mDisposables = new CompositeDisposable();
}
//将所有disposable放入,集中处理
mDisposables.add(disposable);
}
统一管理,销毁时一起销毁,避免爆内存
- onEvent(event);
是一个空方法,如果子类重写就把事件交给子类处理
发送
RxBus.getDefault().post(new Event(100,"message"))
//code最好在Event.java中统一定义,方便管理
处理
override fun onEvent(event: Event<*>?) {
super.onEvent(event)
}
这一部分,其实在 注册 中已经完成,只要子类自己重写方法,就能取到数据