RxJava笔记
来源:互联网 发布:电大和网络教育的区别 编辑:程序博客网 时间:2024/06/06 01:01
RxJava的流行就不多说了,作为程序员的我,碰到流行的架子,当然是比较欣喜,比较好奇,我看一下RxJava响应式编程有哪些特性,学习学习!
- 记住一点:
让复杂的程序逻辑回归简单 清晰
源码地址
https://github.com/ReactiveX/RxJava
RxJava is a Java VM implementation of Reactive Extensions: a library for composing asynchronous and event-based programs by using observable sequences.
一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库!
It extends the observer pattern to support sequences of data/events and adds operators that allow you to compose sequences together declaratively while abstracting away concerns about things like low-level threading, synchronization, thread-safety and concurrent data structures.
她继承了观察者模式的特性,去支持数据/事件序列,增加了操作符,当关心那些低级线程同步,线程安全和并发数据结构类的纠结问题时,Rx允许你把这些问题组合成一个序列!
Zero Dependencies
< 1MB Jar
Java 6+ & Android 2.3+
Java 8 lambda support
Polyglot (Scala, Groovy, Clojure and Kotlin)
Non-opinionated about source of concurrency (threads, pools, event loops, fibers, actors, etc)
Async or synchronous execution
Virtual time and schedulers for parameterized concurrency
如果第一次听这些什么序列,什么事件驱动,确实一脸懵逼,暂时过吧~
对比其他技术为什么要选择RxJava
Obervable(被观察者) 和 Subscriber(订阅者) 可以做任何事情
- Observable可以是一个网络请求,Subscriber来显示请求结果;
- Observable可以是一个数据库查询,Subscriber来显示查询结果;
- Observable可以是按钮点击事件,Subscriber来响应点击事件;
- Observable可以是大图片文件的加载解析,Subscriber来展示解析后的图片;
RxJava的相关API
Observable 可观察者/被观察者 { 事件 }
Observer/Subscriber(观察者/订阅者) { 消费事件 }
操作符(Operators) (常用的)
- map 转换对象
- flatMap 平铺对象
- disinct 去重复(独特的)
- take 从开始取出固定个数
- doOnNext 输出元素之前的额外操作
- toList 打包对象为集合
Scheduler 调度器,用于线程控制
- Schedulers.immdeiate() > 直接在当前线程运行,相当于不指定线程。这是默认的 Scheduler。
- Schedulers.newThread() > 每次都创建新的线程执行
- Schedulers.io() > I/O流操作(文件、数据库、网络信息交互等)所使用的 Scheduler。行为模式和 newThread() 差不多,区别在于 io() 的内部实现是是用一个无数量上限的线程池,可以重用空闲的线程,因此多数情况下 io() 比 newThread() 更有效率。不要把计算工作放在 io() 中,可以避免创建不必要的线程。
- Schedulers.computation() > 计算所使用的 Scheduler。这个计算指的是 CPU 密集型计算,即不会被 I/O 等操作限制性能的操作,例如图形的计算。这个 Scheduler 使用的固定的线程池,大小为 CPU 核数。不要把 I/O 操作放在 computation() 中,否则 I/O 操作的等待时间会浪费 CPU。
- AndroidSchedulers.mainThread() > UI主线程{Android专有的}
有了可调度线程,那谁来控制线程调度呢?
* subscribeOn可执行多次,切换操作符的线程
* observerOn 只需要执行一次,指定订阅者执行的线程(事件消费的线程,这样应该更专业)
使用
Subscriber 的 onStart() 可以用作流程开始前的初始化。
但onStart() 由于在 subscribe() 发生时就被调用了,因此不能指定线程,而是只能执行在 subscribe() 被调用时的线程。这就导致如果 onStart() 中含有对线程有要求的代码(例如在界面上显示一个 ProgressBar,这必须在主线程执行)将会有线程非法的风险,因为有时你无法预测 subscribe() 将会在什么线程执行。
而与Subscriber.onStart()相对应的有一个方法 Observable.doOnSubscribe() 。它和 Subscriber.onStart() 同样是在 subscribe() 调用后而且在事件发送前执行,但区别在于它可以指定线程。默认情况下, doOnSubscribe() 执行在 subscribe() 发生的线程;而如果在 doOnSubscribe() 之后有 subscribeOn() 的话,它将执行在离它最近的 subscribeOn() 所指定的线程。
- RxJava笔记
- Rxjava笔记
- RxJava笔记
- RxJava笔记
- rxJava笔记
- RxJava笔记
- RxJava笔记
- RxJava笔记
- RxJava笔记
- [RxJava笔记]RxJava操作符
- RxJava学习笔记
- RxJava学习笔记
- RxJava的学习笔记
- RxJava 学习笔记一
- RxJava 学习笔记二
- RxJava学习笔记1
- RxJAVA学习笔记(一)
- RxJava学习笔记2
- 大数据IMF传奇行动绝密课程第31课:Spark资源调度分配内幕天机彻底解密
- 目前比较全的CSS重设(reset)方法总结
- Linux下比较好用的性能监控工具
- 第五章JSP(1)
- 1.1两个char类型数据相加后,转化为int类型
- RxJava笔记
- 王爽《汇编语言》实验11——编写子程序
- 107. Binary Tree Level Order Traversal II
- F28027第九课---SPI操作解读
- MFC 获取App,Doc,MainFrame,View指针
- Jquery点击事件只触发一次的解决方法
- C++ 课程设计学生成绩管理系统源代码
- [OS复习]程序装入技术、简单存储管理技术
- 把二叉树打印成多行