我理解的Rxjava

RxJava 是什么

 

RxJava就是一种用Java语言实现的响应式编程,来创建基于事件的异步程序,也就是一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库

 

 

RxJava 好在哪

简洁。

异步操作很关键的一点是程序的简洁性,因为在调度过程比较复杂的情况下,异步代码经常会既难写也难被读懂。 Android 创造的AsyncTask Handler ,其实都是为了让异步代码更加简洁。RxJava 的优势也是简洁,但它的简洁的与众不同之处在于,随着程序逻辑变得越来越复杂,它依然能够保持简洁。

 

扩展的观察者模式

简单概括就是,观察者(Observer)需要在被观察者(Observable)变化的时候做出反应。

而两者通过注册(Register)或者订阅(Subscribe)的方式进行绑定。

 

Observable:发射源,“可观察的”,在观察者模式中称为“被观察者”或“可观察对象” ,发出一系列事件,他是事件的产生者

 

Observer:接收源,“观察者”,就是观察者模式中的“观察者”,可接收Observable、Subject发射的数据;

 

Subscriber“订阅者”,也是接收源,负责处理事件,他是事件的消费者通常在主线程执行

 

观察者模式:

其中这个Button就是被观察者(Observable),OnClickListener就是观察者(Observer),两者通过setOnClickListener达成订阅(Subscribe)关系,之后当Button产生OnClick事件的时候,会直接发送给OnClickListener,它做出相应的响应处理。

 

 

 

普通事件

onNext() 接收被观察者发送的消息

 

特殊的事件:

onCompleted() 事件队列完结

onError () 事件队列异常

onCompleted():事件队列完结。

 

RxJava 不仅把每个事件单独处理,还会把它们看做一个队列。

RxJava 规定,当不会再有新的 onNext () 发出时,需要触发 onCompleted () 方法作为标志。

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

 

 

RxJava 中Scheduler——调度器,相当于线程控制器,

RxJava 通过它来指定每一段代码应该运行在什么样的线程。

RxJava 已经内置了几个Scheduler,它们已经适合大多数的使用场景:

 

1:Schedulers.immediate():直接在当前线程运行,相当于不指定线程。这是默认的Scheduler

 

2:Schedulers.newThread():总是启用新线程,并在新线程执行操作。

 

3:Schedulers.io():I/O 操作(读写文件、读写数据库、网络信息交互等)所使用的 Scheduler

行为模式和 newThread()差不多区别在于 io()的内部实现是是用一个无数量上限的线

程池可以重用空闲的线程,因此多数情况下 io()比 newThread()更有效率。不要把计算

工作放在 io()中可以避免创建不必要的线程。

 

 

Android 还有一个专用的

 

AndroidSchedulers.mainThread():

它指定的操作将在 Android主线程运行。有了这几个 Scheduler,就可以使用

subscribeOn()和 observeOn()两个方法来对线程进行控制了。

 

subscribeOn():指定 subscribe()所发生的线程,即 Observable.OnSubscribe 被激活时所处的线程。或者叫做事件产生的线程。

observeOn():指定 Subscriber所运行在的线程。或者叫做事件消费的线程。

 

 

还支持发送一个数组

String[] str = {"a", "b", "c", "d"};

Observable.fromArray(str)

 

1、map和flatMap都是接受一个函数作为参数(Func1)

2、map函数只有一个参数,参数一般是Func1

Func1的<I,O>I,O模版分别为输入和输出值的类型,实现Func1的call方法对I类型进行处理后返回O类型数据

3、flatMap函数也只有一个参数

Func1,Func1的<I,O>I,O模版分别为输入和输出值的类型,实现Func1的call方法对I类型进行处理后返回O类型数据,

不过这里O为Observable类型

 

依赖:

 

 

compile 'io.reactivex:rxjava:1.1.6'

compile 'io.reactivex:rxandroid:1.2.1'

 

http://blog.csdn.net/u014137988/article/details/53538446

 

http://blog.csdn.net/caihongdao123/article/details/51897793

 

http://gank.io/post/560e15be2dca930e00da1083

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值