上篇大体介绍了RxJava中几种常见的Subject特性

下面我们着重阐述BehaviorSubject在Android中适合的使用场景及其实现方式

场景:A页面正在请求数据D时立马跳到B页面,B页面希望能够接受到A页面发起请求返回的数据

解决方案有多种eg:使用Android 驻留广播机制、EventBus、RxJava。

该篇主要介绍RxJava的具体实现方式
它和前面几种方案都类似,都是在B页面注册广播事件、在数据D回来后立马发送广播(即使注册或者订阅的是在发送广播/事件之后)


第一步:编写一个类,该类负责发送事件和订阅事件

public class MyDataEvent {//能够缓存订阅之前的最新数据(如果有)private static BehaviorSubject<String> sTotalAssetEvent = BehaviorSubject.create();private MyDataEvent() {}/*** 发送事件* @param text*/public static void publish(String text) {sTotalAssetEvent.onNext(text);}/*** 订阅事件* @param action* @return*/public static Subscription subscrible(Action1<String> action) {return sTotalAssetEvent.subscribe(action);}/*** 反订阅 防止内存泄露* @param subscription*/public static void unSubscrble(Subscription subscription) {if (subscription != null && !subscription.isUnsubscribed()) {subscription.unsubscribe();subscription = null;}}
}

第二步:在A页面请求数据回来后发送数据事件通知

 MyDataEvent.publish("this is a data"+(data++));

第三步:在B页面中订阅事件并对数据做业务逻辑处理

public class BActivity extends Activity {private Subscription mSubscription;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_b);mSubscription = MyDataEvent.subscrible(new Action1<String>() {@Overridepublic void call(String data) {//receive event and process dataLog.d("dbs", BActivity.class.getSimpleName() + ": " + data);}});}@Overrideprotected void onDestroy() {super.onDestroy();MyDataEvent.unSubscrble(mSubscription);}
}

这样无论是数据在进入页面B前到达还是数据在进入页面B之后到达,B页面都会接受到数据,因为此处使用了BehaviorSubject。

效果图

附件下载

如果对BehaviorSubject不是很了解可以参看RxJava中常见的几种Subject

RxJava中BehaviorSubject适合的使用场景相关推荐

  1. RxJava中常见的几种Subject

    RxJava是什么? 原文是这样描述的: RxJava is a Java VM implementation of Reactive Extensions: a library for compos ...

  2. Blender中的大师级3D环境场景制作学习教程

    你需要在一个地方学习的一切 在本课程中,您将学习Blender中景观创建的每一个重要工作流程,而无需使用任何付费附加组件或资产. 你将学习如何创造山脉.海洋.森林.沙漠.云层和天气影响.无需搜索描述特 ...

  3. Redis的七种武器及其适合的应用场景

    长生剑.孔雀翎.碧玉刀.多情环.离别钩.霸王枪.拳头是古龙笔下的七种武器,而本文打算将Redis的几种使用方式 Strings.Hashs.Lists.Sets.Sorted Sets.Pub/Sub ...

  4. Redis在项目中的地位及使用场景剖析

    Redis在项目中的地位及使用场景剖析 一. redis 特点 所有数据存储在内存中,高速读写 提供丰富多样的数据类型:string. hash. set. sorted set.bitmap.hyp ...

  5. 区块链开发中的9大应用场景

    区块链开发中的9大应用场景 自从2008年区块链技术的概念在中本聪的手里诞生以来,至今已有10年的历史.伴随着比特币市值的巨大波动,不管是男女老少都多多少少对区块链技术有过一定的了解.当很多人听到&q ...

  6. mysql 轨迹数据存储_中移物联网在车联网场景的 TiDB 探索和实现

    原标题:中移物联网在车联网场景的 TiDB 探索和实现 作者介绍:薛超,中移物联网有限公司数据库运维高级工程师. 中移物联网有限公司是中国移动通信集团公司投资成立的全资子公司,公司按照中国移动整体战略 ...

  7. RPA教程丨银行RPA在银行业中的9大应用场景

    文 | 鄂攀 根据以往项目经验,总结了银行RPA在银行业中的9大应用场景,以供参考. 第一种:银行同业对账 流程图如下: 因为涉及各银行的网银登录,所以自动化中密码储存安全性至关重要,同时还得能识别银 ...

  8. 在3ds Max和Vray中创建赛博朋克圣诞老人室内场景

    我叫奥马尔·萨米·罗什迪,建筑师.室内设计师.助理讲师.摄影师和3d艺术家.2019年获得建筑学硕士学位.我曾为多家建筑事务所和顾问工作,甚至建立了自己的建筑工作室.我有很长的大学教学生涯,从2013 ...

  9. [CTO札记]MM晕倒地铁中--最适合的活动未必是阅读

    今天地铁中遇到了一件事. ------------------------------------------------------ 早上乘地铁2号线,刚过南京东路站,我站到了中间较空的位置.旁边站 ...

最新文章

  1. 解决postgresql数据库localhost可以连接,ip连接不了的问题
  2. classmethod和staticmethod
  3. github 使用总结-----转
  4. AbstractReferenceCountedByteBuf源码分析
  5. 配置hibernate_测试Hibernate的最低配置
  6. java arraylist排序_最全Java集合笔记
  7. Android 实现选中与非选中样式效果
  8. 【数据结构与算法】顺序表V3.0的Java实现
  9. python 包和模块_Python中的包和模块实例
  10. 【JEECG Dubbo专题】jeecg-p3集成dubbo文档
  11. 文本框的值默认显示文本域上_13.4.4 键盘与文本事件
  12. lte和4g有什么区别
  13. 【java笔记】IDEA debug调试
  14. pyzabbix 删除触发器_zabbix设置邮件报警, Zabbix常用Key值, zabbix触发器表达式详解, zabbix制作自己模板...
  15. 摆脱Wi-Fi信号干扰的对策
  16. getconnectiontimeoutexception 网络问题排查_家里wifi信号差?给小白的无线排查操作指南...
  17. APP测试——经典面试题分享
  18. visio如何忽略跳线|跨线
  19. lvds传输距离标准_lvds接口标准
  20. 又修改了winxp_blue皮肤的一些字体和颜色的小细节

热门文章

  1. android python 纠正图片,Python脚本替换Android资源(包名,图片,文件内容)
  2. 六十九、完成Vue项目城市选择页,路由配置,搜索框布局、列表布局、BetterScroll 的使用和字母表布局
  3. 五十八、2020美赛C题的思路以及个人Python的解法
  4. 幸福指数测试软件,测试你和ta的幸福指数能不能爆表
  5. c语言改u3d游戏,使用Unity3D怎么制作一个五子棋游戏
  6. 今日arXiv精选 | 23篇顶会论文:ICASSP / ICCV / CIKM / ICME / AAAI
  7. 北京招聘 | 美团视觉智能中心招聘视觉算法实习生
  8. 13亿参数,无标注预训练实现SOTA:Facebook提出自监督CV新模型
  9. 时间自适应卷积:比自注意力更快的特征提取器
  10. 沉默是金 矩阵快速幂