RxBus使用示例

首先导入rxjava,rxAndroid,rxlifecycle

compile 'io.reactivex:rxandroid:latest.release'
compile 'io.reactivex:rxjava:latest.release'
compile 'com.trello:rxlifecycle:latest.release'
compile 'com.trello:rxlifecyclecomponents:latest.release'

为什么要导入rxlifecycle?因为用rxlifecycle可以很省事的解决了rxbus的unregiste问题

接下来看rxbus代码:

1.先创建 _bus

private final Subject<Object, Object> _bus;
private volatile static RxBus instace;

    public RxBus() {
        _bus = new SerializedSubject<>(PublishSubject.create());
    }


2.然后创建一个单列模式

 public static RxBus getBus() {
        if (instace == null) {
            synchronized (RxBus.class) {
                if (instace == null)
                    instace = new RxBus();
            }
        }
        return instace;
    }

3.接下来就是核心功能了:

 public void send(Object o) {
        _bus.onNext(o);
    }

    /**
     * dosen't designation to use specail thread,It's depending on what the 'send' method use
     * @param lifecycleTransformer rxlifecycle
     * @return
     */
    public Observable<Object> toObserverable(LifecycleTransformer lifecycleTransformer) {
        return _bus.compose(lifecycleTransformer);
    }

    /**
     * designation use the MainThread, whatever the 'send' method use
     * @param lifecycleTransformer rxlifecycle
     * @return
     */
    public Observable<Object> toMainThreadObserverable(LifecycleTransformer lifecycleTransformer) {
        return _bus.observeOn(AndroidSchedulers.mainThread()).compose(lifecycleTransformer);
    }

‘send’ Method 不用说了,类似otto的post,用于发送事件;而toObserverable 就是用来接收事件的,
为什么还有个toMainThreadObserverable呢,因为当你使用send 发送事件的时候有可能不是在主线程里发送的,而你的toObserverable里的某些事件却有可能需要在主线程里执行,比如更新view;所以就需要个toMainThreadObserverable不论send在什么线程里执行的,到这里都是转到主线程里;

下面介绍使用方法:
1.首先你必须创建一个event类,来区分事件:

public class MainActivityEvent {
    String value;

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }
}

2.然后就是send

 MainActivityEvent mainActivityEvent = new MainActivityEvent();
mainActivityEvent.setValue("Hello");
RxBus.getBus().send(mainActivityEvent);

3.接收端:

        RxBus.getBus().toObserverable(bindUntilEvent(ActivityEvent.DESTROY))
                .subscribe(new Action1<Object>() {
                    @Override
                    public void call(Object event) {
                        if(event instanceof MainActivityEvent){
                            MainActivityEvent mainActivityEvent = (MainActivityEvent) event;
//                            Toast.makeText(getApplicationContext(),mainActivityEvent.getValue(),Toast.LENGTH_SHORT).show();
                            Log.d(TAG, "call: "+((MainActivityEvent) event).getValue());
                        }
                    }
                });

这里的bindUntilEvent(ActivityEvent.DESTROY)是我使用了rxlifecycle的RxAppCompatActivity

一个简单的rxbus示例就完成了

本文demo源码

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值