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的代码并不是我写的,我只是搬运工,忘了从哪里复制过来的···

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,966评论 25 709
  • EventBus主要用来消息/事件的传递,却能实现组建之间的解耦。对比其他的消息传递: ** 使用监听器接口(Li...
    spiritTalk阅读 12,624评论 4 25
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,833评论 19 139
  • 面试题总结 通用 安卓学习途径, 寻找资料学习的博客网站 AndroidStudio使用, 插件使用 安卓和苹果的...
    JingBeibei阅读 5,674评论 2 21
  • 器材:尼康D5300 拍摄地:泸沽湖 图片版权归本人所有,图片授权于简书用于设置为app开屏图,一切版权纠纷与简书无关。
    流浪未完成阅读 1,337评论 0 1

友情链接更多精彩内容