您的位置:首页 > 理论基础 > 计算机网络

retrofit+okhttp+rxjava

2016-09-01 23:50 302 查看
概念

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) {

    }

});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: