您的位置:首页 > 编程语言 > Java开发

简单使用RxBus替代EventBus

2016-10-09 13:47 204 查看
首先注意第一点,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的写法,日后会更新更方便快捷的写法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  rxjava