RxBus 基于 RxJava1.x 实现消息传递机制
来源:互联网 发布:台湾中华电信网络制式 编辑:程序博客网 时间:2024/05/19 17:49
这节我们继续讲述 RxJava1.x 的另一个特性。RxBus,实现消息传递机制。
网上关于RxBus在RxJava1.x上的封装很多,但我觉得调用起来还是不够简洁,于是自己又稍微封装了下。
首先,还是在 app的 module 中引入 RxJava1.x 的依赖:
//rxjava compile 'io.reactivex:rxjava:1.2.7'//rx对Android的支持 compile 'io.reactivex:rxandroid:1.2.1'//rxjava
然后创建一个RxBus的消息机制调用类,代码如下:
package com.test.rxbus;import rx.Observable;import rx.Subscription;import rx.android.schedulers.AndroidSchedulers;import rx.functions.Action1;import rx.schedulers.Schedulers;import rx.subjects.PublishSubject;import rx.subjects.SerializedSubject;import rx.subjects.Subject;/** * Created by Admin on 2017/5/19. * * RxBus 实现消息传递机制 * * 需要引入RxJava1.x相关依赖 * * //rxjava * compile 'io.reactivex:rxjava:1.2.7'//rx对Android的支持 * compile 'io.reactivex:rxandroid:1.2.1'//rxjava * */public class RxBus { private final Subject bus; private Subscription mSubscription; private RxBus() { bus = new SerializedSubject<>(PublishSubject.create()); } /** * 单例模式RxBus * * @return */ private static class RxBusHolder { private static final RxBus instance = new RxBus(); } public static synchronized RxBus getInstance() { return RxBusHolder.instance; } /** * 接收消息 * * @param eventType * @param <T> * @return */ private <T> Observable<T> toObserverable(Class<T> eventType) { return bus.ofType(eventType); } public interface CallBack{ void onCallBack(Object obj); } /** * 发送消息,外部调用 * * @param data */ public void post(RxData data) { bus.onNext(data); } /*** * 接收消息,外部调用(一般放在setListener中,类似button监听的用法) */ public void register(final CallBack callBack){ mSubscription = RxBus.getInstance().toObserverable(RxData.class) //在io线程进行订阅,可以执行一些耗时操作 .subscribeOn(Schedulers.io()) //在主线程进行观察,可做UI更新操作 .observeOn(AndroidSchedulers.mainThread()) //观察的对象 .subscribe(new Action1<RxData>() { @Override public void call(RxData data) { if(callBack!=null){ callBack.onCallBack(data); } } }); } /*** * 注销,外部调用 */ public void unRegister(){ if(mSubscription!=null&&!mSubscription.isUnsubscribed()){ mSubscription.unsubscribe(); } }}
其中涉及到一个消息传递的载体RxData,它是一个model,代码如下:
package com.test.rxbus;import java.io.Serializable;/** * Created by Admin on 2017/5/19. */public class RxData<T> implements Serializable{ private int code; private String message; private T data; public int getCode() { return code; } public void setCode(int code) { this.code = code; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public T getData() { return data; } public void setData(T data) { this.data = data; }}
主要涉及的就是这两个类,然后看activity中怎么调用:
首先activity实现 RxBus的CallBack接口,类似如下:
public class MainActivity extends BaseActivity<MainPresenter> implements MainContract.View,View.OnClickListener,RxBus.CallBack{
然后在 setListener方法中注册RxBus,代码如下:
@Override protected void setListener() { mBtnFinger.setOnClickListener(this); //注册Rxbus RxBus.getInstance().register(this); }
由于activity实现了RxBus.CallBack接口,于是便会自动生成 onCallBack(RxData data) 方法用于接收数据。
现在看看activity中数据是怎么发出和接收的,首先看发出代码,此处以点击按钮发送数据为例:
@Override public void onClick(View v) { switch (v.getId()) { case R.id.finger: RxData data=new RxData(); data.setCode(0x1); data.setMessage("接收消息了"); data.setData("可以了吗"); RxBus.getInstance().post(data); LogUtil.e("====fashe===="); break; default: break; } }
再看看activity中接收数据的代码:
@Override public void onCallBack(Object obj) { int code= ((RxData)obj).getCode(); String message= ((RxData)obj).getMessage(); String data= ((RxData)obj).getData().toString(); LogUtil.e("====code===="+code); LogUtil.e("====message===="+message); LogUtil.e("====data===="+data); }
当然,在执行完毕后,别忘了在activity的ondestroy中注销:
@Override protected void onDestroy() { //注销Rxbus RxBus.getInstance().unRegister(); super.onDestroy(); }
最后运行出来的结果如下:
05-19 13:10:01.420 7983-7983/com.test E/pei: ====fashe====05-19 13:10:01.421 7983-7983/com.test E/pei: ====code====105-19 13:10:01.421 7983-7983/com.test E/pei: ====message====接收消息了05-19 13:10:01.421 7983-7983/com.test E/pei: ====data====可以了吗
Ok,关于 BxBus 在RxJava1.x 上的运用今天就讲到这里,谢谢诶。
阅读全文
0 0
- RxBus 基于 RxJava1.x 实现消息传递机制
- RxBus进阶------基于RxJava2.x实现以注解的方式传递消息
- Rxjava1.x实现定时器
- RxJava1.0的RxBus使用
- RxJava1.x
- 基于JSR-356实现的Tyrus WebSocket框架的消息传递机制初步了解
- Android中Message机制实现消息传递
- delphi的消息机制实现消息传递字符串
- Delphi字符串 消息机制实现消息传递字符串
- 基于多种协议的消息传递机制简介(转)
- RxJava1.x 初识
- 2. RxJava1.x基本概念
- rxjava1.x学习
- Window消息传递机制
- Window消息传递机制
- VC消息传递机制
- ipanel 消息传递机制
- Handler消息传递机制
- C++实验6:项目3—矩阵求和
- Mysql 常见时间函数整理
- spark的三种模式的详细运行过程
- 刷微信步数,运动排名
- 初学者对java数组中栈和堆的认识
- RxBus 基于 RxJava1.x 实现消息传递机制
- Spark性能优化指南——基础篇
- android中布局和View创建的源码分析---setContentView
- Maven学习总结(15)——深入理解Maven相关配置
- 使用HDC画音频波形图
- 测试一篇博客
- emoji正则表达式
- hdu1426数独游戏Sudoku Killer DFS
- Android动画(一)