RxJava整理

来源:互联网 发布:微商加好友软件 编辑:程序博客网 时间:2024/05/17 09:09

RxJava 响应式的编程
RxJava 和传统的观察者模式有什么不同,以及它是如何很好的扩展观察者模式,还有它是怎么应用到Android的
观察者模式:建立在subject的基础上。一个subject是一个特殊的对象,它包含了一系列想要在它改变 时得到通知的对象。这些对象称作观察者(Observers),它们暴露一些用来通知的方法,这些方法会在subject的状态产生变化时得到调用。 
就想有一些数据通过表格,柱状图,饼图来表示,当数据发生改变的时候,这些表现数据的形式也随之发生改变,所有这些表现出来的东西都是观察者,它们依赖于同一个subject,而这个subject维护着所有的数据 —也就是多个观察者监听同一个主题

在RxJava中角色有


生产者(被观察者)
 Observable
 Subject


消费者(观察者)Observer Subscriber


当我们在这行一些轻量级异步任务时候Java提供了一些经典的类Thread,Future,FutrueTask等等,当复杂度增加的时候,这些解决方法变得杂乱,他们不能形成链,Android用到比较多的就是AsynTask和Hander

• Observer与Observable是通过 subscribe() 来达成订阅关系。
• RxJava中事件回调有三种: onNext() 、 onCompleted() 、 onError() 。
• 如果一个Observerble没有任何的Observer,那么这个Observable是不会发出任何事件的。

从发射的角度来看:一个hot Observable,典型的是当它创建时就尽可能早的发射事件。所以任意订阅了这个Observable的观察者会从中间某一处开始接收值。一个冷的Observable会等待一个观察者的订阅,然后才发射事件。所以这个观察者能看到这个 Observable的所有事件。 所以第三点是针对冷启动来说的


 

关于RxJava的回调事件
• onNext():基本事件。
• onCompleted(): 事件队列完结。RxJava 不仅把每个事件单独处理,还会把它们看做一个队列。RxJava 规定,当不会再有新的 onNext() 发出时,需要触发 onCompleted() 方法作为标志。
• onError(): 事件队列异常。在事件处理过程中出异常时,onError() 会被触发,同时队列自动终止,不允许再有事件发出。

实现RxJava步骤:

1、创建Observer


Observable<Integer> observablestring=Observable.create(new Observable.OnSubscribe<Integer>(){    @Override public void call(Subscriber<? super Integer> observer){        for(int i=0;i<5;i++){            observer.onNext(i); }        observer.onCompleted(); }});使用操作符:Observable<Integer> observablestring=Observable.from(list);
 


2、创建Subject

3、订阅observable.subscribe(observer)

 

 我们都知道耗时任务,都要放到子线程,子线程不能更新UI,线程调度器Handler等更新UI,比较繁琐,都不是很理想----》RxJava异步

Schedulers.immediate()
直接运行在当前线程,相当于不指定线程
Schedulers.newThread();
总是启用新县城,并在新线程执行操作
Schedulers.io()
I/O 操作(读写文件,读写数据库,网络信息交互等)所使用的Scheduler。行为模式和newThread()差不多,区别在于io()的内部实现是用一个无数量上限的线程池,可以重用空闲的线程,因此多数情况,要比newThread更有效率。不要把计算工作放在io中,比如数据过滤,避免创建不必要的线程。

Scheduler.computation()使用固定的线程池,大小为CPU核数,不要把IO操作放在该线程,否则io操作的等待时间会浪费CPU

Scheduler.mainThread()Android主线程 


0 0