EventBus的坑和RxBus的使用

前面几篇文章因为不知道简书怎么写,结果格式乱七八糟的,现在才知道代码怎么插进来,汗~
英文状态下左上角的那个符号 ,打3个就是了 “`

记录下RxBus的坑······

很久很久以前·····
好吧,不是很久,之前有看到热门流行框架中有EventBus的框架用来传输数据,我一直以为是activity跳转间传输数据过去的,其实这事 intent 就能做,类的传输可以在bean那里加个 implements Serializable 就好,这个最简单了,不过Android中推荐的是用 Parcelable 。
后来我导入EventBus按照配置都配置好了,发现activity跳转的时候数据死活传不过去(就是像intent那样传)。

很久很久以后····
才发现EventBus是广播的方式,要先在一个已存在的activity或者fragment中注册监听,然后在随便一个地方发送广播,凡是已注册监听的地方就能接收到广播,然后嘛,数据都过来了,你爱干啥干啥···
因为一直都在用RxJava,这东西是这两年才火起来的,可是我在国内还没火的时候就开始用了,吐槽一下,那时候的坑真特么的多啊,这个到时候会记录篇纯使用的方法吧,毕竟现在网上的教程太多了(吐槽下当年教程真特么少),回到来,用RxJava的话就可以不用EventBus了,可以直接配置RxBus就好,一样的效果,还不用导包,上代码

public class RxBus {
    private static RxBus instance;
    private Vector<Subject> subjectList = new Vector<>();

    private RxBus() {
    }

    public static synchronized RxBus getInstance() {
        if (null == instance) {
            instance = new RxBus();
        }
        return instance;
    }

    public synchronized <T> Observable<T> register(@NonNull Object object) {
        Subject<T, T> subject = PublishSubject.create();
        subjectList.add(subject);
        return subject;
    }

    public synchronized void unregister(Object object) {
        subjectList.remove(object);
    }

    public void post(@NonNull Object content) {
        synchronized (this) {
            for (Subject subject : subjectList) {
                if (subject != null) {
                    subject.onNext(content);
                }
            }
        }
    }
}

这个是最简单版本,拿来传传字符还是挺好用的,复杂点的百度一下就好,因为我觉得这个勉强够用了(其实用到的地方不多)

然后是注册监听

private Observable<String> observable;

在onCreat里面配置一下

observable= RxBus.getInstance().register(this);
getRxBus();

接着是接收函数

    //RxBus 接收广播
    private void getRxBus(){
        observable.observeOn(AndroidSchedulers.mainThread()).subscribe(new Action1<String>() {
            @Override
            public void call(String msg) {
                keyword=msg;
                getData();
            }
        });
    }

最后别忘了在onDetory里面解除注册
RxBus.getInstance().unregister(this);

好了,要接收数据的地方配置好了,注意,要接收数据那么这个activity就不能finish掉(好像这是废话)

然后你可以跳在其它activity啊还是随便哪里使用
RxBus.getInstance().post("数据");
嗯,就这一句话发送广播,然后所有已注册监听的activity就都能收到广播了。

最后,使用的场景嘛,例如下:搜索的功能可以用,百度定位那里的结果也可以用,其它的自行脑补就好。

PS:RxBus的代码并不是我写的,我只是搬运工,忘了从哪里复制过来的···

    原文作者:eiun
    原文地址: https://www.jianshu.com/p/6e16649e46d0
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞