RxBus 简单使用学习
来源:互联网 发布:php小说源码手机版 编辑:程序博客网 时间:2024/06/07 16:02
最近需要重构项目,准备用EventBus,后来想了想还是用新的技术比较好点,所以用了RxBus ,但是我这里用的是RxBus2,RxBus2的用法跟RxBus的用法不一样,改了很多地方,大家可以在网上搜索下,我这里只是提供最简单的应用场景用法。
1.我们知道EventBus,RxBus2,的目的就是为了组件之间的通讯。
应用场景:在购物车的Fragment中 正价商品数量,然后让主Activity 底部购物车数量提示数量实时更新,如何做到呢,我们就用这个RxBus2。
导入:
//rxjava2 start compile 'io.reactivex.rxjava2:rxjava:2.0.3' compile 'io.reactivex.rxjava2:rxandroid:2.0.1' //rxjava2 end
package com.dk.basepack.bseaapplication.util;import java.util.Map;import java.util.concurrent.ConcurrentHashMap;import io.reactivex.Observable;import io.reactivex.ObservableEmitter;import io.reactivex.ObservableOnSubscribe;import io.reactivex.disposables.CompositeDisposable;import io.reactivex.subjects.PublishSubject;import io.reactivex.subjects.Subject;/** * Created by Administrator on 2017/10/10. */public class RxBus { private volatile static RxBus mDefaultInstance; private final Subject<Object> mBus; private final Map<Class<?>, Object> mStickyEventMap; public RxBus() { mBus = PublishSubject.create().toSerialized(); mStickyEventMap = new ConcurrentHashMap<>(); } public static RxBus getInstance() { if (mDefaultInstance == null) { synchronized (RxBus.class) { if (mDefaultInstance == null) { mDefaultInstance = new RxBus(); } } } return mDefaultInstance; } /** * 发送事件 */ public void post(Object event) { mBus.onNext(event); } /** * 根据传递的 eventType 类型返回特定类型(eventType)的 被观察者 */ public <T> Observable<T> toObservable(final Class<T> eventType) { return mBus.ofType(eventType); } /** * 判断是否有订阅者 */ public boolean hasObservers() { return mBus.hasObservers(); } public void reset() { mDefaultInstance = null; } /** * Stciky 相关 */ /** * 发送一个新Sticky事件 */ public void postSticky(Object event) { synchronized (mStickyEventMap) { mStickyEventMap.put(event.getClass(), event); } post(event); } /** * 根据传递的 eventType 类型返回特定类型(eventType)的 被观察者 */ public <T> Observable<T> toObservableSticky(final Class<T> eventType) { synchronized (mStickyEventMap) { Observable<T> observable = mBus.ofType(eventType); final Object event = mStickyEventMap.get(eventType); if (event != null) { return observable.mergeWith(Observable.create(new ObservableOnSubscribe<T>() { @Override public void subscribe(ObservableEmitter<T> subscriber) throws Exception { subscriber.onNext(eventType.cast(event)); } })); } else { return observable; } } } /** * 根据eventType获取Sticky事件 */ public <T> T getStickyEvent(Class<T> eventType) { synchronized (mStickyEventMap) { return eventType.cast(mStickyEventMap.get(eventType)); } } /** * 移除指定eventType的Sticky事件 */ public <T> T removeStickyEvent(Class<T> eventType) { synchronized (mStickyEventMap) { return eventType.cast(mStickyEventMap.remove(eventType)); } } /** * 移除所有的Sticky事件 */ public void removeAllStickyEvents() { synchronized (mStickyEventMap) { mStickyEventMap.clear(); } } /** * 普通订阅解绑 * @param disposable */ public static void rxBusUnbund(CompositeDisposable disposable){ if (null != disposable && !disposable.isDisposed()) { disposable.clear(); } }}
使用:
发送:
RxBus.getInstance().post(new SetShoppingGoodsCount(Run.goodsCounts));
接收:
compositeDisposable = new CompositeDisposable(); RxBus.getInstance().toObservable(SetShoppingGoodsCount.class) .subscribe(new Observer<SetShoppingGoodsCount>() { @Override public void onSubscribe(Disposable d) { compositeDisposable.add(d); } @Override public void onNext(SetShoppingGoodsCount setShoppingGoodsCount) { setShoppingCarCountWithoutAnimation(setShoppingGoodsCount.getCount()); } @Override public void onError(Throwable e) { } @Override public void onComplete() { } });
解绑,如果不解绑就会造成内存溢出
@Override protected void onDestroy() { super.onDestroy(); RxBus.rxBusUnbund(compositeDisposable); }
Sticky,上面已经有了封装,如果想用,看看推荐的链接。这算是RxBus最简单的使用了,更复杂的我也在研究,学习一下。
推荐看:
[深入RxBus]:支持Sticky事件
http://www.jianshu.com/p/71ab00a2677b
http://www.jianshu.com/p/f43903b28cc2
阅读全文
0 0
- RxBus 简单使用学习
- RXBUS的简单使用
- Rxbus的简单使用
- RxBus简单使用
- 简单使用RxBus替代EventBus
- RxBus的实现及简单使用
- RxBus的实现及简单使用
- RxBus的实现及简单使用
- RxBus的实现及简单使用
- 关于Android--->RxBus的简单使用
- RxBus使用
- 使用RxJava实现的超简单事件总线RxBus
- 一个简单的、结合注解使用的RxBus
- 安卓广播升级 RxBus的实现及简单使用
- RxBus简单实现
- RxBus 用法学习总结
- RxJava+RxBus的使用
- RxBus使用示例
- [ACM模板]SuffixArray后缀数组
- APP的CPU,内存,耗电,流量测试工具
- mysql 权限用户创建
- IDCC 2017第十二届中国IDC产业年度大典即将于12月在京举办1
- 字号、pt、px、em换算对照表
- RxBus 简单使用学习
- Android 集成环信EaseUI
- android 透明式状态栏 或者 沉浸式状态栏
- APP的安全测试点
- react项目中,一些插件版本导致的错误
- Esp8266学习之旅④ 了解PWM,更为深入地用PWM控制一盏LED的亮度变化。(附带demo)
- 序列化与反序列化
- APP的安装卸载测试
- APP的UI测试