用 rxAndroid2 写了个 eventbus,求给点意见。

2017-06-21 17:02:46 +08:00
 vjnjc

背景

以前用的 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");
                    }
                }
            });

一些疑问

4953 次点击
所在节点    Android
6 条回复
pual
2017-06-21 17:14:15 +08:00
在主线程构造的匿名内部类持有外部类的引用, 在 onDestroy 等地方 Dispose 可以避免内存泄露
Chrisplus
2017-06-21 17:15:53 +08:00
vjnjc
2017-06-21 17:20:11 +08:00
@Chrisplus 终于看到现成的了,多谢!
3pmtea
2017-06-21 17:41:45 +08:00
subject 类有个 ofType 方法,可以用来过滤事件类型
订阅是需要释放的,用 CompositeDisposable 收集起来,在 onDestroy 的时候释放,或者用 rxlifecycle

另外,最好是给个 BaseEvent 基类,不然 bus 可以 post 任意 object 的话,一不小心自己或者队友就有可能会 post 一个毫无干系的东西,然后收不到事件,编译器也不会叫,导致 de 半天的 bug
vjnjc
2017-06-21 17:56:36 +08:00
@3pmtea 多谢。暂时没有做 BaseEvent,因为我有个类似 BaseHttpResponse 的东西,eventBus 的 object 和 http 的 object 是同一个。因为单继承。。。
Cabana
2017-06-22 08:39:18 +08:00
不知道你有没有用 j 大的 rxrelay 来发布事件,你如果使用 rx 原生的 subjects 去发布事件的话,在遇到 error 后会导致后续事件无法发布

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/370100

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX