RxBus 开源,基于 RxJava 的 event bus
2017-03-13 本文已影响350人
大利猫
介绍
RxBus 是一个发布/订阅模式的事件总线,用法和 EventBus 一样简单。RxBus 基于 RxJava 开发,除了拥有和 EventBus
一样简单的事件总线机制之外,还拥有 RxJava 的丰富特性。
如何使用
-
定义 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 方法来包装一个处理过程, 处理结果会自动发送到观察者。
RxBus 开源,基于 RxJava 的 event bus-
在 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'
}