首先注意第一点,RxBus不是一个框架,是利用Rxjava的特性所开发的一种模式,下面来看代码
public class RxBus {
private static volatile RxBus defaultInstance;
private final Subject<Object, Object> objectObjectSubject = new SerializedSubject<>(PublishSubject.create());
public static RxBus getDefault() {
if (defaultInstance == null) {
synchronized (RxBus.class) {
if (defaultInstance == null) {
defaultInstance = new RxBus();
}
}
}
return defaultInstance;
}
public void post(Object obj) {
objectObjectSubject.onNext(obj);
}
public Observable<Object> toObservable() {
return objectObjectSubject;
}
}
使用方法:
public class BaseActivity extends FragmentActivity {
Subscription subscription;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
subscription = RxBus.getDefault().toObservable().observeOn(AndroidSchedulers.mainThread()).subscribe(new Action1<Object>() {
@Override
public void call(Object o) {
RxBusEvent(o);
}
});
}
protected void RxBusEvent(Object o) {
}
@Override
protected void onDestroy() {
super.onDestroy();
if (subscription != null && !subscription.isUnsubscribed()) {
subscription.unsubscribe();
}
}
}
在普通Activity中使用
public class MainActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
}
public void clickString(View v) {
RxBus.getDefault().post("我发送了一条字符串");
}
public void clickBean(View v) {
RxBus.getDefault().post(new RxBean("0", "哈哈"));
}
@Override
protected void RxBusEvent(Object o) {
super.RxBusEvent(o);
if (o instanceof String) {
Toast.makeText(MainActivity.this, o.toString(), Toast.LENGTH_LONG).show();
} else if (o instanceof RxBean) {
RxBean rxBean = (RxBean) o;
Toast.makeText(MainActivity.this, rxBean.getName(), Toast.LENGTH_LONG).show();
}
}
}
这只是目前我所知道的一种RxBus的写法,日后会更新更方便快捷的写法