摘要:前面说过的功能很强大,不仅仅是实现链式的异步操作,它的功能很强大还可以通过实现的消息事件传递功能,我们来看看使用实现继承了类又实现了接口,可以同时担当订阅者和被订阅者的角色一个类产生多个对象,用一存储起来,以进行批量的取消订阅。
前面说过Rxjava的功能很强大,不仅仅是实现链式的异步操作,它的功能很强大还可以通过RxBus实现EventBus的消息/事件传递功
能,我们来看看
RxBus
1 package com.example.liujian.rxjavademo; 2 3 import java.util.HashMap; 4 5 import rx.Observable; 6 import rx.Subscription; 7 import rx.android.schedulers.AndroidSchedulers; 8 import rx.functions.Action0; 9 import rx.functions.Action1; 10 import rx.schedulers.Schedulers; 11 import rx.subjects.PublishSubject; 12 import rx.subjects.SerializedSubject; 13 import rx.subscriptions.CompositeSubscription; 14 15 /** 16 * @project_Name: RxjavaDemo 17 * @package: com.example.liujian.rxjavademo 18 * @description: 使用Rxjava,RxAndroid实现RxBus 19 * @author: liujian 20 * @date: 2016/10/5 11:08 21 * @version: V1.0 22 */ 23 24 public class RxBus { 25 private static volatile RxBus mInstance; 26 //Subject继承了Observable类又实现了Observer接口, Subject可以同时担当订阅者和被订阅者的角色 27 private SerializedSubjectView Code
不多解释了,注释都写的很清楚了,我们来看一下如何使用
发送消息:
RxBus.getInstance().post("这是发送的消息");
处理消息:
public void doSubscribe(){ Subscription subscription = RxBus.getInstance().doSubscribe(String.class, new Action1() { @Override public void call(String s) { Toast.makeText(MainActivity.this,s, Toast.LENGTH_SHORT).show(); } }); RxBus.getInstance().addSubscription(this,subscription); }
或者
public void doSubscribe(){ Subscription subscribe = RxBus.getInstance().toObservable(String.class) .filter(new Func1() { @Override public Boolean call(String s) { return true; } }) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Action1 () { @Override public void call(String s) { Log.i(TAG, "call: " + s); } }); RxBus.getInstance().addSubscription(this,subscribe); }
取消订阅:
@Override protected void onDestroy() { //取消订阅,释放内存 RxBus.getInstance().unSubscribe(this); super.onDestroy(); }
功能的完善
当我们使用PublishSubject时,可能有些功能还不是很完善,比如我们只能先订阅事件,然后发送事件,如果反过来,先发送了事件再进
行订阅操作,比如两个Activity之间传递消息,怎么保证发送的事件不丢失呢?也就是EventBus的StickEvent功能,这个时候
PublishSubject就没有办法实现,我们可以替换为BehaviorSubject
private RxBus() { mSubject = new SerializedSubject<>(BehaviorSubject.create()); }
但是BehaviorSubject只能缓存最近一个发送给它的事件,如果我们需要缓存多个事件可以改用ReplaySubject
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/3086.html
摘要:说好的分类集合来啦,采用标签云的方式来展示掘金阅读提示点击下文中返回到顶部有分类不合理的地方请提。反编译这个后发现其使用个优质的开源项目掘金是由的开源的一个库,用于构建可预期的和声明式的用户界面。 想不想通过一线互联网公司面试? - Android - 掘金国内一线互联网公司内部面试题库 以下面试题来自于百度、小米、乐视、美团、58、猎豹、360、新浪、搜狐内部题库 熟悉本文中列出的知...
摘要:说好的分类集合来啦,采用标签云的方式来展示掘金阅读提示点击下文中返回到顶部有分类不合理的地方请提。反编译这个后发现其使用个优质的开源项目掘金是由的开源的一个库,用于构建可预期的和声明式的用户界面。 想不想通过一线互联网公司面试? - Android - 掘金国内一线互联网公司内部面试题库 以下面试题来自于百度、小米、乐视、美团、58、猎豹、360、新浪、搜狐内部题库 熟悉本文中列出的知...
摘要:最近开始转移到掘金。要解决的问题支持切换网络请求地址,例如实现掘金前言以前在项目中使用,来进行事件通知与订阅。因此精华翻译掘金本人学习完了后,将值得重点注意的变化进行了翻译和归纳,适合正在使用的同学快速了解如果错误欢迎批评指正。 收藏安卓开发中非常实用优秀的库! 有图有真相! - Android - 掘金本来是打算收藏工具类的,但转念一想,已经有这么多优秀的库了,就没必要再去重复造轮子...
摘要:相信大多数开发者都使用过,作为事件总线通信库,如果你的项目已经加入和,不妨用代替,以减少库的依赖。只会把在订阅发生的时间点之后来自原始的数据发射给观察者。 原文链接:http://lingyunzhu.github.io RxJava目前已经很火了,如果你尚未了解请看这里。对于RxJava这里不多做介绍。RxBus并不是一个库,而是一种模式。相信大多数开发者都使用过EventBus,作...
阅读 381·2023-04-25 19:43
阅读 3572·2021-11-30 14:52
阅读 3374·2021-11-30 14:52
阅读 3298·2021-11-30 14:49
阅读 3234·2021-11-30 14:49
阅读 3451·2021-11-29 11:00
阅读 3448·2021-11-29 11:00
阅读 3470·2021-11-29 11:00