RxJava的理解

前言

一直想弄明白RxJava到底是什么,为了加深对Rxjava的理解,特地写博客,为了后期的应用和学习,常言道,好记性不如烂笔头,借鉴学习大牛的博客,努力通俗易懂。

首先推荐一下:给Android开发者的Rxjava详解
感谢扔物线的分享

1.RxJava是什么?

它是基于观察者模式和异步实现的,是扩展的观察者模式。它具体好在哪呢?就是随着程序的逻辑变得越来越复杂,它依然能够保持简洁;RxJava的实现是通过从上而下的链式调用,没有任何嵌套,逻辑的简洁,不代表代码量的减少。

RxJava刚才说了,是一种扩展的观察者模式,它有四个基本的概念:
Observable(可观察者,即被观察者)、Observer(观察者)、subsribe(订阅)、事件。这个类似于android开发中比较典型的例子,点击监听器OnClickListener

这里写图片描述

其中,view(button)是被观察者,OnClickListener是观察者,二者通过setOnClickListener()方法达成订阅关系,而被调用的OnClickListenerde的方法onClick,就是事件。

这里写图片描述

button相当于observable,onClickListener相当于observer,比较类似,但是与传统的观察者模式有所不同的是,除了普通事件onNext()(相当于onclick()/onEvent())之外,还定义的特殊的事件:onCompleted()和onError().

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

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

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

2.基本实现

基于以上的概念,RxJava的基本实现主要有三点:
1)创建Observer
Observer 即观察者,它决定事件触发的时候将有怎样的行为。 RxJava 中的 Observer 接口的实现方式:

Observer<String> observer = new Observer<String>() {

    @Override

    public void onNext(String s) {

        Log.d(tag, "Item: " + s);

    }



    @Override

    public void onCompleted() {

        Log.d(tag, "Completed!");

    }



    @Override

    public void onError(Throwable e) {

        Log.d(tag, "Error!");

    }};

除了 Observer 接口之外,RxJava 还内置了一个实现了 Observer 的抽象类:Subscriber。 Subscriber 对 Observer 接口进行了一些扩展,但他们的基本使用方式是完全一样的:

Subscriber<String> subscriber = new Subscriber<String>() {

    @Override

    public void onNext(String s) {

        Log.d(tag, "Item: " + s);

    }



    @Override

    public void onCompleted() {

        Log.d(tag, "Completed!");

    }



    @Override

    public void onError(Throwable e) {

        Log.d(tag, "Error!");

    }};

2)仿写的博客地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值