前面几篇文章因为不知道简书怎么写,结果格式乱七八糟的,现在才知道代码怎么插进来,汗~
英文状态下左上角的那个符号
,打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的代码并不是我写的,我只是搬运工,忘了从哪里复制过来的···