retrofit+okhttp+rxjava

来源:互联网 发布:网络虚拟手机号 编辑:程序博客网 时间:2024/06/05 17:07
概念


Rx是响应式编程的意思, 本质是观察者模式, 是以被观察者(Observerable)和订阅者(Subscriber)其实就是(observer观察者)为基础的异步响应方式。
RxAndroid来源于RxJava, 在RxJava的基础上扩展了一些Android的功能。


RxAndroid最核心的两个东西是Observables(被观察者,事件源)和Subscribers(观察者)。Observables发出一系列事件,Subscribers处理这些事件。这里的事件可以是任何你感兴趣的东西(触摸事件,网络通信…)。




基本概念
被观察者: Observable
作用: 决定什么时候触发事件以及触发怎样的事件
创建方法:
Observable.just(T...) 参数为单个的
Observable.from(T[]) / Observable.from(Iterable<? extends T>) 参数为数组或Iterable


观察者: Observer
作用: 当事件触发的时候将有怎样的行为,实现类有Observer / Subscriber


订阅: subscribe
作用: 把Observable和Observer关联起来
方法:
observable.subscribe(observer);
observable.subscribe(subscriber);


事件:
onNext():普通事件
onCompleted():事件队列完结
onError(): 事件队列异常


线程控制
RxAndroid提供了一个Scheduler用来控制线程,指定某一段代码在那个线程里运行。


内置的Scheduler:
Schedulers.immediate(): 直接在当前线程运行,相当于不指定线程。这是默认的 Scheduler。
Schedulers.newThread(): 总是启用新线程,并在新线程执行操作。
Schedulers.io(): I/O 操作(读写文件、读写数据库、网络信息交互等)所使用的 Scheduler。行为模式和 newThread() 差不多,区别在于 io() 的内部实现是是用一个无数量上限的线程池,可以重用空闲的线程,因此多数情况下 io() 比 newThread() 更有效率。
Schedulers.computation(): 计算所使用的 Scheduler。这个计算指的是 CPU 密集型计算,即不会被 I/O 等操作限制性能的操作,例如图形的计算。这个 Scheduler 使用的固定的线程池,大小为 CPU 核数。不要把 I/O 操作放在 computation() 中,否则 I/O 操作的等待时间会浪费 CPU。
AndroidSchedulers.mainThread(): Android专用,它指定的操作将在 Android 主线程运行。


指定线程:
Observable.subscribeOn():指定事件产生的线程
Observable.observeOn():指定订阅者所运行在的线程。或者叫做事件消费的线程。






查看案例:




//创建被观察者即Observable
Observable.create(new Observable.OnSubscribe<Object>() {
@Override
public void call(Subscriber<? super Object> subscriber) {
        Call<Object> call = service.strRepos();
try {
//处理耗时的任务
Response<Object> response = call.execute();
            String result = response.body().toString();
//任务完成以后,通过观察者处理事件
subscriber.onNext(result);
        } catch (Exception e) {
            e.printStackTrace();
            subscriber.onError(e);
return;
        }


        subscriber.onCompleted();
    }
})
.subscribeOn(Schedulers.io())//处理任务执行的线程
.observeOn(AndroidSchedulers.mainThread())//处理事件执行的线程
        //由观察者或者订阅者,来处理事件
.subscribe(new Subscriber<Object>() {
@Override
public void onCompleted() {


    }
@Override
public void onError(Throwable e) {


    }


@Override
public void onNext(Object o) {


    }
});



0 0