前言

  • Rxjava越来越火,现在是Android里面一个重要的框架,想要进阶安卓就想必要去了解一下什么是Rxjava。看了很多关于Rxjava的文章,故此留下学习的印记,让自己或者有需要的人去学习了解接触。然后一步一步去揭开Rxjava神秘的面纱~

Rxjava是什么

  • 引用官方的一句话- “a library for composing asynchronous and event-based programs using observable sequences for the Java VM”(一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库)。其实总的来说就是异步操作。说起异步,我们难免会想到AsyncTask / Handler等这些。那么Rxjava和它们的一些区别又在什么地方呢?使用Rxjava的好处就在于它能在逻辑十分复杂的情况下依然能够保持简洁明了的链式代码。这个具体需要通过代码去体会它的好处,本文的目的是先入门Rxjava,因此在后续的文章中再来详细说说这个问题。

组成

  • Rxjava主要由三部分组成:Observable(被观察者)、Subscriber(观察者)、subscribe(订阅)。
  • 乍一看这就跟观察者模式有相像之处,如果还不知道观察者模式的话,可以看看这篇文章,或者去Google一下。

使用

  • 创建被观察者
Observable observable = Observable.create(new Observable.OnSubscribe<String>() {// 通过create创建observable对象,在call中调用subscriber的onnext方法@Overridepublic void call(Subscriber<? super String> subscriber) {subscriber.onNext("Hello");subscriber.onNext("World");subscriber.onCompleted();}
});
  • 创建观察者
Observer<String> observer = new Observer<String>() {@Overridepublic void onNext(String s) {Log.d(tag, "Rxjava: " + s);}@Overridepublic void onCompleted() {Log.d(tag, "Completed!");}@Overridepublic void onError(Throwable e) {Log.d(tag, "Error!");}
};

其实还有一种创建观察者的方式

Subscriber<String> subscriber = new Subscriber<String>() {@Overridepublic void onNext(String s) {Log.d(tag, "Rxjava: " + s);}@Overridepublic void onCompleted() {Log.d(tag, "Completed!");}@Overridepublic void onError(Throwable e) {Log.d(tag, "Error!");}
};

从本质上看这没有什么区别,因为在 RxJava 的 subscribe 过程中,Observer会被转换成Subscriber。其中更具体的区别在本文中先不说,在后续系列文章中说明。先知道一般使用Subscriber
* 最后,就是订阅事件

// 通过调用subscribe方法使观察者和订阅者产生关联,一旦订阅观察者就开始发送消息
observable.subscribe(observer);
// 或者
observable.subscribe(subscriber);
  • 输出结果
Rxjava:Hellow World Completed!

Just方法

Observable.just(1,2,3,4).subscribe(new Observer<String>() {@Overridepublic void onCompleted() {Log.d(tag ,"onCompleted");}@Overridepublic void onError(Throwable arg0) {}@Overridepublic void onNext(String string) {Log.d(tag ,string+",");}
});
  • 输出结果
1,2,3,4,Completed!

from方法

private void Rxjava() {List<String> list = new ArrayList<>();list.add("1");list.add("2");list.add("3");Observable.from(list).subscribe(new Action1<String>() {@Overridepublic void call(String s) {Log.d(tag , s+",");}});
}
  • 输出结果
1,2,3,

repeat方法

private void Rxjava() {List<String> list = new ArrayList<>();list.add("1");list.add("2");list.add("3");Observable.from(list).repeat(2)/重复执行两次.subscribe(new Action1<String>() {@Overridepublic void call(String s) {Log.d(tag , s+",");}});
}
  • 输出结果
1,2,3,1,2,3,

range方法

Observable.range(0,10).subscribe(new Observer<Integer>() {@Overridepublic void onCompleted() {log.d(tag , "onCompleted");}@Overridepublic void onError(Throwable arg0) {}@Overridepublic void onNext(Integer arg0) {log.d(tag , arg0+",");}});
  • 输出结果
0,1,2,3,4,5,6,7,8,9,onCompleted

interval方法

 private void Rxjava() {// 第一个参数为指定轮询时间,第二个参数为轮询时间单位(这里以秒为单位)Observable.interval(2, TimeUnit.SECONDS).subscribe(new Action1<Long>() {@Overridepublic void call(Long time) {Log.d(tag , time);}});}
  • 输出结果
10-10 11:45:22.599 27973-20494/com.kid.rxjavademo rxjava:  0
10-10 11:45:24.600 27973-20494/com.kid.rxjavademo rxjava:  1
10-10 11:45:26.600 27973-20494/com.kid.rxjavademo rxjava:  2...

timer方法

private void rxjava() {// 指定一定时间后才发射(这里是4秒钟),将会在4秒后收到事件Observable.timer(4, TimeUnit.SECONDS).subscribe(new Action1<Long>() {@Overridepublic void call(Long timer) {Log.d(tag , "receiver");}});}

另外timer还有一个三个参数的方法timer(3,3,TimeUnit.SECONDS)意思是 延迟3秒之后,每隔3秒发射一次

总结

  • 以上那些都是Rxjava比较常用的操作符,自己打过一遍上面的demo之后也就会对rxjava有了初步的理解,接下来的内容就会更加容易理解。接下来的系列文章中,将会继续探讨Rxjava。

Rxjava之旅-入门篇相关推荐

  1. 源码系列第1弹 | 带你快速攻略Kafka源码之旅入门篇

    大家过年好,我是 华仔, 又跟大家见面了. 从今天开始我将为大家奉上 Kafka 源码剖析系列文章,正式开启 「Kafka的源码之旅」,跟我一起来掌握 Kafka 源码核心架构设计思想吧. 今天这篇我 ...

  2. 女友问粉丝过万如何庆祝,我发万字长文《保姆级大数据入门篇》感恩粉丝们支持,学姐|学妹|学弟|小白看了就懂

    2021大数据领域优质创作博客,带你从入门到精通,该博客每天更新,逐渐完善大数据各个知识体系的文章,帮助大家更高效学习. 有对大数据感兴趣的可以关注微信公众号:三帮大数据 目录 粉丝破万了 新星计划申 ...

  3. Symbian开发系列 - 入门篇

    要开始我的Symbian开发之旅了, 先收集一些相关资料,如Symbian概述, 开发平台搭建, 参考书籍与网络资源. [基础] 什么是Symbian 学习Symbian的基本概念  Symbian操 ...

  4. python语言自学教程-3D图示Python标准自学教程入门篇

    内容简介: Python入门篇教程从最基础的计算机发展史.Python的来源与发展历史开始讲起: 依次讲解python变量与表达式.数据类型.运算符.流程控制语句等,末尾通过课堂练习.课后作业以及微型 ...

  5. python自学教程-3D图示Python标准自学教程入门篇

    内容简介: Python入门篇教程从最基础的计算机发展史.Python的来源与发展历史开始讲起: 依次讲解python变量与表达式.数据类型.运算符.流程控制语句等,末尾通过课堂练习.课后作业以及微型 ...

  6. flink入门_Flink从入门到放弃-入门篇

    大数据成神之路: 点我去成神之路系列目录^_^ Java高级特性增强-集合 Java高级特性增强-多线程 Java高级特性增强-Synchronized Java高级特性增强-volatile Jav ...

  7. 软件测试系列之入门篇(一)

    一.你知道软件测试有多重要吗? 在国际上,软件测试(软件质量控制)是一件非常重要的工程工作,测试也作为一个非常独立的职业.在IBM.Microsoft等开发大型系统软件公司,很多重要项目的开发测试人员 ...

  8. 软件測试系列之入门篇(一)

    一.你知道软件測试有多重要吗? 在国际上.软件測试(软件质量控制)是一件很重要的project工作.測试也作为一个很独立的职业. 在IBM.Microsoft等开发大型系统软件公司,许多重要项目的开发 ...

  9. 女友问粉丝过万如何庆祝,我发长文《保姆级大数据入门篇》感恩粉丝们支持,学姐|学弟看了就懂

    文章目录 粉丝破万了 新星计划申请时粉丝数 新星内卷抢热榜之旅 运营整顿新星执行新规 重整旗鼓输出内容为王 女友问粉丝过万如何庆祝 保姆级大数据入门篇 一.学习重点划定 二.Java和大数据关系 三. ...

  10. JavaScript的入门篇

    快速认识JavaScript 熟悉JavaScript基本语法 窗口交互方法 通过DOM进行网页元素的操作 学会如何编写JS代码 运用JavaScript去操作HTML元素和CSS样式 <!DO ...

最新文章

  1. AI一分钟|倪光南:“中国芯”切勿重硬轻软;阿里达摩院入职95后最年轻科学家,参与无人车研发...
  2. java抛出数组格式异常,Java中异常
  3. 石川es6课程---3、变量let和常量const
  4. QT集成QML和JavaScript
  5. 数据库内部存储结构探索
  6. canvas clear 指定属性的元素_好程序员web前端分享CSS属性组成及作用
  7. 在SQL Server中的数据库之间复制表的六种不同方法
  8. 自动驾驶——CenterNet(Objects as Points)的学习笔记
  9. android uid文件存储目录,Android系统文件目录结构
  10. python编程语言解析_【笔记】Python之解析式详解
  11. 使用晨曦记账本记账,将账目明细导出excel表格上
  12. 职业规划计算机专业1500字,【计算机职业生涯规划书2000字】_计算机专业职业生涯规划书2000字...
  13. Java源文件命名规则
  14. 算法竞赛进阶指南0x10练习6:防线
  15. 华为云,站在数字化背后
  16. api 3.0 个性化地图缩放时出现白色的底图,然而 api GL缩放时显示正常,调用api 3.0 接口时,如何避免地图缩放时出现白色底图
  17. 本地php开发环境出现 cURL error 60
  18. 划水摸鱼的时候写一篇自己是怎么划水摸鱼的
  19. 中国科学技术大学研究生细胞生物学II考试复习资料
  20. python爬取美女图片的练习

热门文章

  1. 计算机英语简历模板,计算机英文简历范文
  2. SmtpMailSender 发送邮件
  3. 浅谈事业单位考试的几点感受
  4. 无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\tsc.ps1,因为在此系统上禁止运行脚本
  5. Ubuntu18.04 LTS 卸载gnome桌面
  6. beego框架mvc流程
  7. 量化投资学习的一点心得
  8. 关于stm32导入芯片
  9. python编程实战 运用设计模式_《Python编程实战:运用设计模式、并发和程序库创建高质量程序》—— 1.3 工厂方法模式-阿里云开发者社区...
  10. 51单片机第三篇章-数码管