700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > android rxbus github RxBus

android rxbus github RxBus

时间:2023-05-18 05:47:11

相关推荐

android rxbus github RxBus

相信大多数开发者都使用过EventBus或者Otto(我还未实践过),作为事件总线通信库,如果你的项目已经加入RxJava和EventBus(或Otto),那不妨用RxBus代替EventBus或者Otto,省去更多库的依赖。

RxJava

之前已经分享过RxJava知识,可以点击RxJava,这里不再细说。

RxBus

假设你已经对RxJava有所了解,再继续往下看。public class RxBus {

private static RxBus mRxBus = null;

/**

* PublishSubject只会把在订阅发生的时间点之后来自原始Observable的数据发射给观察者

*/

private Subject mRxBusObserverable = new SerializedSubject<>(PublishSubject.create());

public static synchronized RxBus getInstance() {

if (mRxBus == null) {

mRxBus = new RxBus();

}

return mRxBus;

}

public void post(Object o) {

mRxBusObserverable.onNext(o);

}

public Observable toObserverable() {

return mRxBusObserverable;

}

/**

* 判断是否有订阅者

*/

public boolean hasObservers() {

return mRxBusObserverable.hasObservers();

}

}

代码调用

先模拟一个订阅者,用hasObservers判断是否有订阅者,然后再发送。public class RxBusActivity extends AppCompatActivity {

private CompositeSubscription mCompositeSubscription;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_rx_bus);

rxBusObservers();

rxBusPost();

}

private void rxBusPost() {

Log.d("wxl", "hasObservers=" + RxBus.getInstance().hasObservers());

if (RxBus.getInstance().hasObservers()) {

RxBus.getInstance().post(new TapEvent());

}

}

private void rxBusObservers() {

Subscription subscription = RxBus.getInstance()

.toObserverable()

.subscribe(new Action1() {

@Override

public void call(Object event) {

if (event instanceof TapEvent) {

//do something

Log.d("wxl", "rxBusHandle");

}

}

});

addSubscription(subscription);

}

public void addSubscription(Subscription subscription) {

if (this.mCompositeSubscription == null) {

this.mCompositeSubscription = new CompositeSubscription();

}

this.mCompositeSubscription.add(subscription);

}

@Override

protected void onDestroy() {

super.onDestroy();

if (this.mCompositeSubscription != null) {

this.mCompositeSubscription.unsubscribe();//取消注册,以避免内存泄露

}

}

public class TapEvent {

}

}

完整代码

EventBus源码解析

附上大牛们分析的EventBus源码,有兴趣可以看看

EventBus源码研读 by kymjs张涛

EventBus 源码解析 by Trinea

复制代码复制代码

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。