美文网首页移动开发前线AndroidAndroid技术知识
Rxjava梳理(1)--Observable,Observer

Rxjava梳理(1)--Observable,Observer

作者: 小7 | 来源:发表于2015-10-28 23:42 被阅读3170次

最近在研究Rxjava,也希望能自己的一些输入梳理出来,帮助自己形成一个体系吧。话说自己第一次认识Rxjava还是参加了一次Thoughtworks组织的一次分享上。当时的第一印象就是Rxjava跟我们一般的写程序的思路确实有些不同,需要花些时间消化。现在就开始梳理自己对Rxjava的理解。

不管学什么东西,第一步先要了解它的概念:“A library for composing asynchronous and event-based programs by using observable sequences.”这句话的意思是Rxjava是一个利用监听者模式构成了异步的并且事件驱动的程序。什么意思呢?先从监听者模式开始说起吧。相信大家对监听者模式并不算陌生吧,当对象A对对象B感兴趣的话,会让对象B注册自己并告诉它:“我对你很感兴趣,请你在XXX状态改变的时候或者是引发XXX事件的时候通知我”。Android中最常见的一个例子就是View.setOnClickListener() 方法,对该视图控件感兴趣的对象会实现OnClickListener这个接口并要求该控件注册自己。这样只要这个空间有了点击事件发生,这个对象用来监听的回调方法就会被调用。

Rxjava则是对观察者模式的一个高度的抽象,它包括两个非常重要的类:Observable(被观察者)和Observer(观察者),而这两个类的对象之间是通过subscribe()方法来建立订阅关系的连接。

先来看看Observer的的代码:
<code>
public interface Observer<T>{
public void onNext(T t);
public void onCompleted();
public void onError(Throwable e);
}
</code>
其中onNext()方法类似onClick()方法用来供观察者处理事件,而onCompleted()方法是被观察者用来告诉观察者:“我传给你的事件已经都传完了,你可以做你的事情了”,onError()方法是被观察者告诉观察者:"我在给你传事件的时候出错了,去看一看吧"。由此可以看出来一个Observer对象对一次订阅只可能调用onCompleted()和onError()方法的其中一个,而不可能两个方法都调用。

下面来看看如果生成Observable对象吧。最原始的一个方法是Observable.create(OnSubscribe<T> onSubscribe),该方法中的参数OnSubscribe是一个接口,该接口的方法如下:
<code>
public void call(Subscriber<? super T> subscriber);
</code>
类Subscriber是Observer的子类,这样就不难猜到观察者里的调用逻辑就是在OnSubscribe里的call方法定义的。通过Observable.create()方法也就衍生出了一系列的更加方便的生成Observable对象的方法。比如Observable.just("1","2","3")方法就相当于在OnSubscribe对象里的call方法是这样实现的:
<code>
subscriber.next("1");
subscriber.next("2");
subscriber.next("3");
subscriber.onCompleted();
</code>

当Observable对象和Observer对象都有了的时候就要靠subscribe()方法把两者连接起来:Observable.subscribe(Subscriber),可见subscribe方法的参数是Subscriber类,在该类中除了含有Observer接口的那几个方法外还有两个方法:

  1. onStart():它是在subscribe()发生后,事件发生前调用的,用来做一些准备工作
  2. unsubscribe():它表示取消订阅,也就是说它调用后Subscriber对象不再接收传过来的事件。当然它还有一个更重要的作用就是释放掉Observable的引用,以避免内存泄漏的威胁。

以上就是关于Rxjava中最基本的一些概念的梳理,以后还会继续,现在关于Rxjava的教程文档并不算多,所以我自己也在学习阶段,希望能和更多的朋友进行交流。

相关文章

  • Rxjava梳理(1)--Observable,Observer

    最近在研究Rxjava,也希望能自己的一些输入梳理出来,帮助自己形成一个体系吧。话说自己第一次认识Rxjava还是...

  • 18.RxJava与Retrofit

    一、RxJava1,基本用法创建 Observable、创建 Observer、 SubscribeObserva...

  • 十一、RxJava简析

    RxJava有4个角色Observable、Observer、Subscriber和Suject,Observab...

  • rxJava学习笔记

    rxJava日常学习 简述rxjava基本概念:Observable(被观察者),Observer(观察者),Su...

  • RxJava的响应类型、调度器、Subject、错误处理

    Observable 在RxJava中,一个实现Observer接口的对象 订阅 一个 Observable类的对...

  • 10. RxJava

    RxJava Observable: 被观察者Observer: 观察者subscribe: 订阅observe...

  • RxJava 2.0(一)简介

    RxJava基础 使用RxJava之前,先了解四个基本概念: Observable:被观察者 Observer:观...

  • RxJava2.0初学知识回顾

    1、RxJava的重要组成 Observable (可观察者,即被观察者)、Observer (观察者)、subs...

  • RXjava

    RXjava 实质是一个异步操作库 1. 导入 2. 概念 Observable(被观察者) : Observer...

  • Subject

    1.Subject可以看成是一个桥梁或者代理,在RxJava中,它同时充当了Observer和Observable...

网友评论

  • Hancock1993:.subscribe()里面现在不能传Subscriber了吗? 我看Subscriber现在在org.reactivestreams包下,而observer则在io.reactivex包下.(还是说我引用的包不对吗?
    compile 'io.reactivex.rxjava2:rxjava:2.1.0'
    compile 'io.reactivex.rxjava2:rxandroid:2.0.1')
    38ee95b2bd0c:我也是这个问题 你解决了吗?
  • alighters:个人感觉啊,是不应该先学java8的函数式表达式,再了解RxJava。不知道楼主怎么看?
    小7:@david_wei 不需要哈,我都没有看过函数式表达式也不影响我看rxjava啊
  • LostAbaddon:代码块的用法错了哦,应该是这样的:
    ```code-lang
    blablabla
    ```
    小7:@塔塔酱 好的,谢谢提醒
  • Android开发:android的适配器模式也是这么个原理吧
    Android开发:@小7 EventBus视乎也是这样的原理吧。我很想研究Rx,最近好像很火,可是没有时间 :grin:
    Android开发:@小7 那不都是观察者模式?
    小7: @Android开发 不一样哦,两种模式解决的问题不同,适配器模式解决的是重用原有的代码适应新接口的问题,观察者模式解决的是及时响应自己感兴趣的对象状态改变的问题

本文标题:Rxjava梳理(1)--Observable,Observer

本文链接:https://www.haomeiwen.com/subject/iesxhttx.html