Android小白之初学RxJava

前言


RxJava中在目前Android开发者开发当中使用非常火热,唯一存在的问题就是不太容易上手,但是一旦搞明白他的原理,用法,你会发现在项目开发当中使用它真是太棒了。那么本文就参考网上资料,针对RxJava的基础进行学习总结。

基础


RxJava是什么?

网上对于RxJava的概念解释有很多,在这里我给出我对它的理解,RxJava是一个异步加载的库,rxjava的优势在于简洁,随着程序逻辑变得越来越复杂,rxJava确一直简洁,能够很大程度的提升代码的阅读性。它无非就是用来发送数据和接收数据。

RxJava的几个基本概念:

Observable:数据的发射源,在观察者模式中称为可观察的或者说是被观察者,

Observer:数据的接受源,在观察者模式中称为观察者;

Subscriber:订阅者,也是数据的接收源,它与Observer的区别在于,Subscriber实现了Observer接口,多了一个重要的方法unsubscribe()用来取消订阅事件,当你不再想接收数据了,可以调用该方法停止接收数据,Observer在subscribe()过程中,最终也会转化成Subscriber对象,因此,一般情况下,都建议使用Subscriber作为数据的接收源;

Subscription:Observable在调用subscribe()的时候返回的对象,同样有unsubscribe()方法,也可以用来取消订阅事件;

核心思想:1)RxJava最核心的两个东西是Observable(被观察者)和Subscribers(观察者),由Observable发出事件,通过Subscribers来处理事件。2)Observable和observer通过subscribe()来实现订阅关系,从而使Observable可以在需要的时候发出事件来通知Observer。3)一个Observable可以发出零个或者多个事件,知道结束或者出错。每发出一个事件,就会调用它的Subscriber的onNext()方法,最后调用Subscriber.onNext()或者Subscriber.onError()结束,但是如果一个Observerble没有任何的的Subscriber,那么这个Observable是不会发出任何事件的。

基本用法:

1. 首先需要添加依赖:

在build.gradle文件中的dependencies节点下添加内容:

compile 'io.reactivex:rxjava:1.1.6'

2. 创建可观察者/被观察者对象Observable:

     使用create()最基础的方式创建被观察者对象,通过调用onNext()方法发送一个String字符串,执行onCompleted()方法表明数据发送完成,这种方法只有手动调用onCompleted()方法,才会回调Observer的onCompleted()方法。

3. 创建一个观察者Subscribers,来处理Observable对象发出的字符串。

onNext()是成功的回调,onError()是失败的回调,onCompleted()是方法完成时的回调。

4. 通过Subscriber()方法,将我们定义的mSubscriber对象和mObserveable对象关联起来,这样就完成了观察者和被观察者之间的订阅关系。

一旦mSubscriber订阅了mObserveable,mObserveable就会去调用mSubscriber的onNext()方法和onCompleted()方法,mSubscriber就会打印出来字符串hello world!.

简洁代码(基于基本用法):

1. 简化Observable的创建过程,可以通过Observable.just()或者Observable.from()来创建只发出一个事件就结束的Observable对象;

2. 简化Subscriber的创建过程,通过对基础用法的观察,发现对于onComplete()和onError()方法没有过多的关注,这个时候我们就可以使用Action1接口。

 subscribe方法有一个重载版本,接受三个Action1类型的参数,分别对应OnNext,OnComplete, OnError函数。在这里我们不太关心onComplete()和onError()方法,因此只需要传一个参数即可onNext。

因此上述代码最终就可以简化成:

拓展:介绍一下Action1这个类; 

1) Action X 接口:

可以通过Action X接口来简化Subscriber的创建过程,它的接口有很多,Action0 和 Action1 最常用,还有Action2, Action3,X代表传入的参数的数目。他们其实是对具有不同传入参数、但是无返回值的方法的包装接口。另外subscribe()会根据这些ActionX对象生成正常的Subscriber。

2)Action 0接口:

rxjava的一个接口,只有一个call()方法,没有参数,没有返回值。由于 onCompleted() 方法也是无参无返回值的,因此 Action0 可以被当成一个包装对象,将 onCompleted() 的内容打包起来将自己作为一个参数传入 subscribe() 以实现不完整定义的回调,这样其实也可以看做将onCompleted()方法作为参数传进了subscribe()方法中。

3)Action 1接口:

它也是RxJava的一个接口,同样只有一个call(T param)方法,他有一个参数,没有返回值。与 Action0 同理,由于 onNext(T obj) 和 onError(Throwable error) 也是单参数无返回值的,因此 Action1可以将 onNext(obj) 和 onError(error) 打包起来传入 subscribe() 以实现不完整定义的回调。

实例练习(给imageView设置图片):

总结

总的来说,Observable和Subscriber可以做任何事情,Observable可以是一个数据库查询,Subscriber用来显示查询结果;Observable可以是屏幕上的点击事件,Subscriber用来响应点击事件;Observable可以是一个网络请求,Subscriber用来显示请求结果。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容