介绍
RxBus 是一个发布/订阅模式的事件总线,用法和 EventBus 一样简单。RxBus 基于 RxJava 开发,除了拥有和 EventBus
一样简单的事件总线机制之外,还拥有 RxJava 的丰富特性。
图片发自简书App
如何使用
定义 EventData:
public static class EventData { /* Additional fields if needed */ }
注解定义订阅者的回调方法,回调方法回在 UI 线程中执行:
@RegisterBus
public void onMessageEvent(MessageEvent event) {/* Do something */};
注册/解注册。 观察者需要被注册到 RxBus,其 @RegisterBus 标记的方法才会被扫描到,在不需要的地方记得解注册。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
// register to RxBus
RxBus.getInstance().register(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
// unregister from RxBus
RxBus.getInstance().unRegister(this);
}
发送数据:
// send data in thread
Data data = new Data();
Data.setContent("hello world");
RxBus.getInstance().send(data);
比 EventBus 多的优点
RxBus 提供 chainProcess 方法来包装一个处理过程, 处理结果会自动发送到观察者。
图片发自简书App
在 MVP 架构的 M 层你可以这样用
RxBus.getInstance().chainProcess(new Func1() {
@Override
public Object call(Object o) {
// do something in IO thread, the return data can be subscribe and receive.
// getUser() is a IO/net process
User user = getUser();
user.setId(uid);
user.setName("大利猫");
return user;
}
});
然后在 P 层接收:
/**
* @RegisterBus mark this method to receive data in UI thread
* @param user
*/
@RegisterBus
public void onUser(User user) {
userView.showUser(user);
}
Gradle independence
Step 1. Add the JitPack repository to your build file, Add it in your root build.gradle at the end of repositories:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
Step 2. Add the dependency
dependencies {
compile 'com.github.liuguangli:RxBus:1.1'
}
源码地址