通常情况下,我们已经习惯了使用EventBus来进行数据传递,但随着RxJava的兴起,与之对应的RxBus也渐渐的走进了我们的视线,如果你对于RxJava有了一定的理解,那么RxBus是很容易上手的。
首先,写一个RxBus类:
public class RxBus {
private static volatile RxBus mInstance;
private final Subject bus;
public RxBus() {
bus = new SerializedSubject<>(PublishSubject.create());
}
//单例模式:
public static RxBus getInstance(){
RxBus rxBus = mInstance;
if(mInstance == null) {
synchronized (RxBus.class){
rxBus = mInstance;
if(mInstance == null) {
rxBus = new RxBus();
mInstance = rxBus;
}
}
}
return rxBus;
}
/**
* 发送消息
*
* @param object
*/
public void post(Object object){
bus.onNext(object);
}
/**
* 接收消息
*
* @param eventType
* @param <T>
* @return
*/
public <T> Observable<T> toObserverable(Class<T> eventType) {
return bus.ofType(eventType);
}
}
然后我们定义一个bean类:
public class User {
private String name;
private String password;
public User(String name, String password) {
this.name = name;
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
在需要的地方发送数据:
RxBus.getInstance().post(new User("xiaoming","123"));
在需要的地方接收数据:
RxBus.getInstance().toObserverable(User.class)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<User>() {
@Override
public void call(User user) {
Toast.makeText(SecondActivity.this, "name=" + user.getName() + "password=" + user.getPassword(), Toast.LENGTH_SHORT).show();
}
});
OK,这就是RxBus的使用示例