使用和配置RxBus

在安卓项目中,传递消息是使用率比较频繁的,我们除了Intent或者Bundle还可以选择使用框架传递消息,框架其实已经封装好并且处理好消息传递,线程使用的,我们只需要直接使用就可以了,那么框架传递消息常用的又有RxJava和EventBus等,就拿RxJava和EventBus两种框架来对比,Rxjava封装好的RxBus优势更加大一些;RxJava比EventBus的应用更广泛,并且更好用,操作也简单一些,使用的地方也更多一些,下面我们就来看Rxjava的创建和使用。

1、导入Rxjava和RxAndroid两种框架

compile 'io.reactivex:rxjava:1.1.5'  

compile 'io.reactivex:rxandroid:1.2.0'

2、创建RxBus管理类,并且分辨加入注册和反注册的方法,还有消息处理,单例模式等处理,这段代码可以直接复制进入项目

public class RxBus {  

private HashMap<Object, List<Subject>> maps = new HashMap<>();  

private static RxBus instance;  

private RxBus() { } public static RxBus get() {  

if (instance == null) {  

synchronized (RxBus.class) {  

if (instance == null) {  

instance = new RxBus();  

} }  

}  

return instance;  

}  

@SuppressWarnings("unchecked")  

public <T> Observable<T> register(@NonNull Object tag, @NonNull Class<T> clazz) {  

List<Subject> subjects = maps.get(tag);  

if (subjects == null) {  

subjects = new ArrayList<>();  

maps.put(tag, subjects);  

}  

Subject<T, T> subject = PublishSubject.<T>create();  

subjects.add(subject);  

return subject;  

}  

@SuppressWarnings("unchecked")  

public void unregister(@NonNull Object tag, @NonNull Observable observable) {  

List<Subject> subjects = maps.get(tag);  

if (subjects != null) {  

subjects.remove((Subject) observable);  

if (subjects.isEmpty()) {  

maps.remove(tag);  

}  

}  

}  

@SuppressWarnings("unchecked")  

public void post(@NonNull Object o) {  

post(o.getClass().getSimpleName(), o); }  

@SuppressWarnings("unchecked")  

public void post(@NonNull Object tag, @NonNull Object o) {  

List<Subject> subjects = maps.get(tag);  

if (subjects != null && !subjects.isEmpty()) {  

for (Subject s : subjects) {  

s.onNext(o);  

}  

}  

}}


3、需要接收数据的页面声明一个需要接收类型的变量来注册和接收数据,并且注册需要传递的数据,并且取出相对应key的值

private Observable<String> msg; //这个地方是做声明变量的,不仅仅为String类型的可以接收,List、Map、类、int等数据类型都是可以接收的但是声明的变量也需要修改的

msg= RxBus.get().register("key", String.class);    //这里是注册接收的数据和类型,如果接收的不是String类型的值,这里的String也需要相应的发生变化
msg.subscribe(new Action1<String>() { //这里是接收的值,如果接收的不是String类型的值,这里的String也需要相应的发生变化 @Override public void call(String msg1) { //如果接收的不是String类型的值,这里的String也需要相应的发生变化 Log.e("打印的值", "接收到的值"+msg1); }});
注意:当页面结束的时候,需要反注册;
RxBus.get().unregister("key", msg);
接收数据的处理就完成了
 
4、发送数据
在需要发送的地方

RxBus.get().post("key", "需要传递的数据");
就可以完成了,这里不需要注册和反注册的。
 
 
整个RxBus的数据传递就完成了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值