RxJava 的学习之后的理解----第一章

Rxjava 最本质的概念还是观察者模式 而观察者模式是

定义了对象间一对多的依赖关系,使得当对象状态发生变化时,所有依赖它的对象都会收到通知并且自动更新自己。

观察者模式 比较不错的学习文章 可以看这个 http://www.jianshu.com/p/d5a758dd2795  初学者学习设计模式 很容易理解

RxJava 有四个基本概念:Observable(可观察者,即被观察者)、Observer(观察者)、subscribe(订阅)、事件

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

这几个单词大家一定要记住是什么意思 我刚刚学习的时候 也是老是忘记 所以才写下这篇文章  自己写一遍 加深印象

根据观察者的设计模式就很好的可以理解了 Observer(观察者) subscribe(订阅)Observable(可观察者,即被观察者)

说的很通俗一点了  就是我观察了你 你做什么事情我都知道你要干嘛   而这个观察就是通过subscribe(订阅来实现的)

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

不过 大家发现 代码 都是 Observable(即被观察者) subscribe (订阅)Observer(观察者)

                                        Observable(即被观察者) subscribe (订阅)Subscriber(观察者)

以上代码意思都是一样的  都是被观察者订阅了观察者。 (看图1.0.0)

不仅基本使用方式一样,实质上,在 RxJava 的 subscribe 过程中,Observer也总是会先被转换成一个Subscriber再使用。所以如果你只想使用基本功能,选择Observer和Subscriber是完全一样的。它们的区别对于使用者来说主要有两点:

onStart(): 这是Subscriber增加的方法。它会在 subscribe 刚开始,而事件还未发送之前被调用,可以用于做一些准备工作,例如数据的清零或重置。这是一个可选方法,默认情况下它的实现为空。需要注意的是,如果对准备工作的线程有要求(例如弹出一个显示进度的对话框,这必须在主线程执行),onStart()就不适用了,因为它总是在 subscribe 所发生的线程被调用,而不能指定线程。要在指定的线程来做准备工作,可以使用doOnSubscribe()方法,具体可以在后面的文中看到。

unsubscribe(): 这是Subscriber所实现的另一个接口Subscription的方法,用于取消订阅。在这个方法被调用后,Subscriber将不再接收事件。一般在这个方法调用前,可以使用isUnsubscribed()先判断一下状态。unsubscribe()这个方法很重要,因为在subscribe()之后,Observable会持有Subscriber的引用,这个引用如果不能及时被释放,将有内存泄露的风险。所以最好保持一个原则:要在不再使用的时候尽快在合适的地方(例如onPause()onStop()等方法中)调用unsubscribe()来解除引用关系,以避免内存泄露的发生。

RxJava 的学习之后的理解----第一章_第1张图片
图1.0.0

大家可以很明显的看到了是被观察者订阅了观察者 (以上代码是基于Rxjava 2.1.0的版本) 

这个大家在逻辑上就有点接受不来了 就像 这看起来就像『杂志订阅了读者』一样颠倒了对象关系  但是既然Rxjava是这样的设计 大家也没有必要非要纠结了

大家可以看到被观察者的实现 模式 一般是 Observable.create();采取的是build的模式

而观察者一般都是new  比如这里 new ConSumer() 出来的对象 这点大家要稍微注意一点 

抛物线大佬增加说过:

RxJava 到底是什么

一个词:异步

 大家还是看代码  图1.0.0很好的实现了异步的操作 

在android 中异步的场景还是有很多的 最常见的就是从服务端获取数据 通常呢 一般都是在后台进行,而显示数据呢 需要在主线程中进行(UI线程)所以 异步在android 中还是十分需要的。

那么RxJava 怎么实现异步呢?

subscribeOn(Schedulers.io());

observeOn(AndroidSchedulers.mainThread());

就是这么简短的两句话就实现了异步的过程 。

这里讲一讲它们之间的区别:

subscribeOn():指定Observable(被观察者)自身在哪个调度器上执行

observeOn() :指定一个观察者在哪个调度器上观察这个Observable(被观察者)

你可能感兴趣的:(RxJava 的学习之后的理解----第一章)