RxJava----简介

来源:互联网 发布:java内存限制 编辑:程序博客网 时间:2024/05/19 17:51

RxJava—GitHub地址

RxJava 简介

RxJava 是 ReactiveX 在 Java 上的开源的实现。主要有两个类:
Observable(可观察者,即被观察者)和Subscriber (订阅者 / 观察者)
Observable 是一个发出数据流或者事件的类
Subscriber 是一个对这些发出的 items(数据流或者事件)进行处理(采取行动)的类。

Observable

  • 一个 Observable 的标准流发出一个或多个 item,然后成功完成或者出错。
  • 一个Observable 可以有多个 Subscribers

Subscriber

  • Subscriber是一个实现了 Observer 的抽象类。
  • SubscriberObserver 接口进行了一些扩展,但基本使用方式是完全一样的
  • Observable发出的item 将会被发送到Subscriber.onNext() 方法来进行处理
  • 一旦 Observable 不再发出 items,它将会调用 Subscriber.onCompleted() 方法
  • 如果有一个出错的话 Observable 会调用 Subscriber.onError() 方法。

RxJava 的观察者模式

  • RxJava 有四个基本概念:

    • Observable (可观察者,即被观察者)
    • Subscriber (观察者
    • subscribe (订阅)
    • 事件

    ObservableSubscriber 通过 subscribe() 方法实现订阅关系
    Observable可以在需要的时候发出事件来通知 Subscriber

与传统观察者模式不同, RxJava 的事件回调方法除了普通事件 onNext() (相当于 onClick() /onEvent())之外, 还定义了两个特殊的事件:
onCompleted()onError()

  • onCompleted(): 事件队列完结。RxJava 不仅把每个事件单独处理,还会把它们看做一个队列。RxJava 规定,当不会再有新的 onNext() 发出时,需要触发 onCompleted() 方法作为标志。

  • onError(): 事件队列异常。在事件处理过程中出异常时,onError() 会被触发,同时队列自动终止,不允许再有事件发出。

  • 在一个正确运行的事件序列中,onCompleted()onError() 有且只有一个,并且是事件序列中的最后一个。需要注意的是,onCompleted()onError() 二者也是互斥的,即在队列中调用了其中一个,就不应该再调用另一个。

使用场景

Rx 适合组合和消耗一系列的事件(数据)。

应当使用 Rx

  • UI 事件响应,例如 鼠标移动、按钮点击事件
  • Domain 事件,例如 属性改变、集合更新、订单提交、注册成功 等
  • 基础架构事件,例如 文件监视、系统事件 等
  • 集成事件,例如从一个消息队列来的一个广播;来自于 WebSockets API 的推送事件 等
  • CEP 集成事件,例如 StreamInsight 或者 StreamBase.

可以使用 Rx

  • Future 的结果或者类似的模式
    这些模式已经工作的很好的,使用 Rx 在这些情况下对开发过程并不会有太多的提升。

不要使用 Rx

  • 把 iterables 变成 observables, 只是为了在 Rx 库中使用它们。

基本讲解:
给 Android 开发者的 RxJava 详解—扔物线
RxJava 入门 - 傅圆的博客 | MrFu Blog

RxJava学习:
RxJava 教程第一部分:入门之 Why Rx - 云在千峰
RxJava Essentials 中文翻译版
Learning Reactive Programming with Java 8 中文翻译版
大头鬼的资料整理—-lzyzsd/Awesome-RxJava: RxJava resources
呼啸而过的专栏 - 博客频道 - CSDN.NET
RxJava - 大头鬼Bruce - 博客频道 - CSDN.NET
【译】使用RxJava从多个数据源获取数据 - 简书
【译】使用RxJava实现延迟订阅 - 简书
用工厂流水线的方式来理解 RxJava 的概念 - 泡在网上的日子
谜之RxJava (二) —— Magic Lift - Gemini @ SegmentFault - SegmentFault

Operators:
ReactiveX - Operators
RxJava操作符(一)Creating Observables-云少嘎嘎嘎-ChinaUnix博客
RxWeekend - 傅圆的博客 | MrFu Blog
谁来讲讲Rxjava、rxandroid中的操作符的作用? - 知乎
RxJava入门实践④ - 推酷

RxJava项目:
带你学开源项目:Meizhi Android之RxJava & Retrofit 最佳实践
【rxjava】rxjava开发,rxjava资源下载-CSDN.NET
jhusain/learnrxjava: A set of exercises to designed to teach developers Rx (Reactive Streams)
kaushikgopal/RxJava-Android-Samples: Learning RxJava for Android by example
halzhang/EverExample: example code

拓展:
kymjs/RxVolley: RxVolley = Volley + RxJava + OkHttp
[Android]基于RxJava、RxAndroid的EventBus实现 - 天天_byconan - 博客园

其他:
RxJava适用场景小结 - 程序人生 - 知乎专栏
Airbnb:我们的安卓客户端是如何使用 RxJava 的 - OPEN 开发经验库
Rx Android实战(重构项目) | 钟买能个人博客
使用RxJava来改进用户体验 - 泡在网上的日子
RxJava学习总结 - 推酷
Rx Android初步探究(一) | 钟买能个人博客
彻底搞懂 RxJava — 基础篇 | android blog
RxJava里doOnNext的使用和线程处理 - kyleada的专栏 - 博客频道 - CSDN.NET
Retrofit+RxJava实战日志 - 易凡的技术园地 - 博客频道 - CSDN.NET
RxJava 与 Retrofit 结合的最佳实践
迷之RxJava(四)—— Retrofit和RxJava的基情 - Gemini @ SegmentFault - SegmentFault

0 0
原创粉丝点击