RxBus-实现EventBus之Sticky
背景
前期由于工作中需要将EventBus
替换成RxBus
,所以按照EventBus
的用法封装了一套自己的RxBus
,基本满足了使用,项目发出后有不少兄弟告诉我没有EventBus
的Sticky
功能,所以得闲完善这个功能,同样是按照EventBus3.0
注解的方式去实现和调用
效果
sticky是什么
在Android开发中,Sticky事件只指事件消费者在事件发布之后才注册的也能接收到该事件的特殊类型。Android中就有这样的实例,也就是Sticky Broadcast,即粘性广播。正常情况下如果发送者发送了某个广播,而接收者在这个广播发送后才注册自己的Receiver,这时接收者便无法接收到刚才的广播,为此Android引入了StickyBroadcast,在广播发送结束后会保存刚刚发送的广播(Intent),这样当接收者注册完Receiver后就可以接收到刚才已经发布的广播。这就使得我们可以预先处理一些事件,让有消费者时再把这些事件投递给消费者。
使用
完全按照EventBus3.0版本的注解的方式去使用
- 发送消息
RxBus.getDefault().post(new EventStickText("我是sticky消息"));
- 接收消息
@Subscribe(threadMode = ThreadMode.MAIN, sticky = true)
public void event(EventStickText eventStickText) {
Observable.timer(1, TimeUnit.SECONDS).observeOn(AndroidSchedulers.mainThread()).subscribe(aLong -> {
textView.setText(eventStickText.getMsg());
});
}
@Override
protected void onStart() {
super.onStart();
RxBus.getDefault().register(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
RxBus.getDefault().unRegister(this);
}
实现
本篇的实现原理是基于之前的RxBus
封装的基础上的完善,所以需要大致了解RxBus
之前基本功能的封装原理方能更加全面的理解一下的内容
1.添加sticky
注解
不懂注解的同学可