RXBUS的简单使用
来源:互联网 发布:ps光学软件 编辑:程序博客网 时间:2024/05/17 22:46
RxBus是用来进行组件之间通讯的。因为项目当中用到了RxJava,因此用RxBus来实现组件之间的通讯,相对来说比较方便。关于RxBus的介绍和其他组件通讯工具EventBus可参考下面链接:
用RxJava实现事件总线
EventBus实战
在没有这些工具之前,我们是怎么实现组件之间的通讯呢?我想到了三点:
1、用intent来传递数据
2、用注入依赖回调(意思就是注册监听回调)
3、借助广播组件(推荐使用本地广播)
我觉得有这三点也足够应付项目上的需求了。但当业务复杂的情况下,借助RxBus或EventBus可大大提高我们的开发效率,而且深度解耦。
下面来看下RxBus是如何使用的:
创建RxBus类:
public class RxBus { private final Subject<Object, Object> _bus; private static class RxBusHolder{ private static final RxBus instance = new RxBus(); } private RxBus() { _bus = new SerializedSubject<>(PublishSubject.create()); } public static synchronized RxBus getInstance() { return RxBusHolder.instance; } public void post(Object o) { _bus.onNext(o); } public <T> Observable<T> toObserverable(Class<T> eventType) { return _bus.ofType(eventType); }}
假如我的需求是这样的:Main2Activity界面做了操作来更新MainActivity界面
首先MainActivity得先注册吧:
public class MainActivity extends AppCompatActivity { @BindView(R.id.test) TextView test; Subscription mSubscription; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); initRxBus(); } private void initRxBus() { mSubscription = RxBus.getInstance().toObserverable(UserEvent.class) .subscribe(new Action1<UserEvent>() { @Override public void call(UserEvent userEvent) { long id = userEvent.getId(); String name = userEvent.getName(); Toast.makeText(MainActivity.this, "name = " + name, Toast.LENGTH_SHORT).show(); } }, new Action1<Throwable>() { @Override public void call(Throwable throwable) { } }); } @Override protected void onResume() { super.onResume(); GankRequestHelp.onRequest(); } @Override protected void onDestroy() { super.onDestroy(); if (!mSubscription.isUnsubscribed()) { mSubscription.unsubscribe(); } } public void onViewClick(View v) { Intent intent = new Intent(this, Main2Activity.class); startActivity(intent); }}
可以看到在initRxBus中向RxBus中的Subject(充当被观察者)订阅了观察者,toObserverable用来过滤UserEvent类型,另外记得onDestroy时进行销毁,防止内存泄漏。
然后我们在Main2Activity中传递数据:
public void onPostRxBusClick(View view) { RxBus.getInstance().post(new UserEvent(1, "wuliqing")); }
可以看到向RxBus中的Subject(充当观察者)提交数据。然后Subject会将数据发射给订阅的观察者。
最后我们可以看到MainActivity接收到了数据。如果在发送数据之前有多处地方订阅了,则都会收到数据。
RXbus的用法在此记录,方便需要的同学查阅。
2 0
- RXBUS的简单使用
- Rxbus的简单使用
- RxBus的实现及简单使用
- RxBus的实现及简单使用
- RxBus的实现及简单使用
- RxBus的实现及简单使用
- 关于Android--->RxBus的简单使用
- RxBus简单使用
- RxBus 简单使用学习
- RxJava+RxBus的使用
- RxBus的使用示例
- Android Rxbus的使用
- Android RxBus的使用
- 简单使用RxBus替代EventBus
- 一个简单的、结合注解使用的RxBus
- 使用RxJava实现的超简单事件总线RxBus
- 安卓广播升级 RxBus的实现及简单使用
- RxBus的实现和使用
- java线程访问ThreadLocal——线程间共享冲突
- iOS - 如何将本地Xcode项目上传到GitHub上
- 关于io和nio
- 删除maven仓库中的LastUpdated文件
- Python 和 Lua 学习比较 一
- RXBUS的简单使用
- 开源协同办公平台 EntboostTW 发布 V1.0 版本
- @property属性关键字的作用
- Java——继承中方法的重写与super关键字
- Windows下使用Maven编译
- yii中引入js和css文件
- 事件触发机制
- redis主从部署
- 解析json数据 (js , java)