背景
以前用的 otto 来持有 eventbus,今天一看他们官网居然不玩了。。。于是根据官方指导引入了 rxAndroid 来实现 bus。跟着这份手册写了个简单的 bus
Bus 实现
https://gist.github.com/jiachenning/34236178ddd5d0d1154a21b38c909429
Bus 用法
_rxBus.send(new UserLogin());
_rxBus.toObserverable()
.subscribe(new Consumer<Object>() {
@Override
public void accept(@NonNull Object obj) throws Exception {
if(obj instanceof UserNotLoginException){
Toaster.showShort(activity, "Userlogin");
}else {
Toaster.showShort(activity, "unknown type");
}
}
});
一些疑问
1
pual 2017-06-21 17:14:15 +08:00 1
在主线程构造的匿名内部类持有外部类的引用, 在 onDestroy 等地方 Dispose 可以避免内存泄露
|
2
Chrisplus 2017-06-21 17:15:53 +08:00 1
|
4
3pmtea 2017-06-21 17:41:45 +08:00
subject 类有个 ofType 方法,可以用来过滤事件类型
订阅是需要释放的,用 CompositeDisposable 收集起来,在 onDestroy 的时候释放,或者用 rxlifecycle 另外,最好是给个 BaseEvent 基类,不然 bus 可以 post 任意 object 的话,一不小心自己或者队友就有可能会 post 一个毫无干系的东西,然后收不到事件,编译器也不会叫,导致 de 半天的 bug |
5
vjnjc OP @3pmtea 多谢。暂时没有做 BaseEvent,因为我有个类似 BaseHttpResponse 的东西,eventBus 的 object 和 http 的 object 是同一个。因为单继承。。。
|
6
Cabana 2017-06-22 08:39:18 +08:00 via Android
不知道你有没有用 j 大的 rxrelay 来发布事件,你如果使用 rx 原生的 subjects 去发布事件的话,在遇到 error 后会导致后续事件无法发布
|