RxBus使用总结
来源:互联网 发布:福州锐捷网络招聘 编辑:程序博客网 时间:2024/06/03 21:05
RxBus
标签(空格分隔): 工具使用
学习YoKey的相关博客的总结
使用
1.引入依赖
dependencies { ... compile 'io.reactivex:rxjava:1.1.5' compile 'io.reactivex:rxandroid:1.2.0'}
2.新建RxBus类
public class RxBus { private static volatile RxBus defaultInstance; private final Subject<Object, Object> bus; // PublishSubject只会把在订阅发生的时间点之后来自原始Observable的数据发射给观察者 public RxBus() { bus = new SerializedSubject<>(PublishSubject.create()); } // 单例RxBus public static RxBus getDefault() { if (defaultInstance == null) { synchronized (RxBus.class) { if (defaultInstance == null) { defaultInstance = new RxBus(); } } } return defaultInstance; } // 发送一个新的事件 public void post(Object o) { bus.onNext(o); } // 根据传递的 eventType 类型返回特定类型(eventType)的 被观察者 public <T> Observable<T> toObservable(Class<T> eventType) { return bus.ofType(eventType); }}
3.定义事件类型(实体类)
public class UserEvent { private String id; private String name; public UserEvent(String id, String name) { this.id = id; this.name = name; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; }}
4.订阅消息
RegisterSubscription(RxBus.getDefault().toObservable(UserEvent.class).subscribe(user -> { tvA.setText(user.getId()); tvB.setText(user.getName()); }));
5.发布消息
RxBus.getDefault().post(new UserEvent("1", "LaLa"));
注意
1.订阅消息的解绑
可以再Base类中添加统一注册和解绑的代码,CompositeSubscription就是个Subscription的集合,可以统一解绑所有的Subscription,但是是一次性的,所以解绑后要置空.反正只要解绑就行,在哪里解绑看业务需求
public class BaseActivity extends AppCompatActivity { public CompositeSubscription mBaseSubscription; @Override protected void onDestroy() { super.onDestroy(); unRegisterSubscription(); } /** * 取消订阅 */ public void unRegisterSubscription() { if (mBaseSubscription != null && (!mBaseSubscription.isUnsubscribed())) { mBaseSubscription.unsubscribe(); mBaseSubscription = null; } } /** * 开始订阅 */ public void RegisterSubscription(Subscription subscription) { if (mBaseSubscription == null) mBaseSubscription = new CompositeSubscription(); mBaseSubscription.add(subscription); }}
2.订阅代码最好加try-catch,因为如果崩了,rx就直接调用onError并不在接收后续消息,所以最好处理下
3.订阅代码可以按业务需求添加操作
RxBus.getDefault() .toObservable(FileLoadEvent.class) .onBackpressureBuffer() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(fileLoadEvent -> { progress(fileLoadEvent.getProgress(), fileLoadEvent.getTotal()); })
其他
1.粘性消息,需要时再添加,参考YoKey博客
0 0
- RxBus使用总结
- RxBus使用总结
- RxBus使用
- RxBus 用法学习总结
- RxJava+RxBus的使用
- RxBus使用示例
- RXBUS的简单使用
- 使用和配置RxBus
- RxBus的使用示例
- 使用RxBus代替广播
- Android Rxbus的使用
- Rxbus的简单使用
- Android RxBus的使用
- RxBus简单使用
- RxBus 简单使用学习
- 使用RxBus替换EvenBus
- RxBus
- RxBus
- 监听是否点击了home键将客户端推到后台
- java 字符串问题
- it好博客
- aliyun阿里云Maven仓库地址——加速你的maven构建
- sp<> 强指针类的用法
- RxBus使用总结
- JavaScript编写城市联动框和时间联动框
- 解决plsql导入后中文乱码
- ASP.NET网站程序防SQL注入式攻击方法
- 第一次调用JNI
- hibernate注解详解
- 对malloc calloc realloc函数以及free函数的认识
- 如何定制嵌入式Linux发布版
- hiveJdbc ha 链接报错