rxbus 在Android组渐渐通信变得更简单更方便解耦的方式
先创建一个Rxbus类
public class FhsRxBus {
private final Subject<Object, Object> mBus;
private static class RxBusHolder{
private static final FhsRxBus instance = new FhsRxBus();
}
private FhsRxBus() {
mBus = new SerializedSubject<>(PublishSubject.create());
}
public static synchronized FhsRxBus getInstance() {
return RxBusHolder.instance;
}
public void post(Object o) {
mBus.onNext(o);
}
public <T> Observable<T> toObservable(Class<T> eventType) {
return mBus.ofType(eventType);
}
}
有了这个类就可以创建一个事件类
public class FhsEvent {
public static final String COMPLETE_INFO = "complete_info";
private String event;
public FhsEvent(String event){
this.event = event ;
}
public String getEvent() {
return event;
}
public void setEvent(String event) {
this.event = event;
}
}
使用方式
在类A中订阅 并处理subscribeEvent事件
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
subscribeEvent()
}
private void subscribeEvent() {
Subscription subscription = FhsRxBus.getInstance().
toObservable(FhsEvent.class).subscribe(new Action1<FhsEvent>() {
@Override
public void call(FhsEvent fhsEvent) {
if (fhsEvent.getEvent().equals(FhsEvent.COMPLETE_INFO)){
commit(true);
}
}
});
subscriptions.add(subscription);
}
同时在onDestory中销毁
@Override
protected void onDestroy() {
super.onDestroy();
for (Subscription subscription : subscriptions)
if (!subscription.isUnsubscribed())
subscription.unsubscribe();
}
在类B中把需要传入的事件发送出去即可
FhsRxBus.getInstance().post(new FhsEvent(FhsEvent.COMPLETE_INFO));