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) {
}
});
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
- Retrofit+RxJava+OKhttp+RxBus
- retrofit+okhttp+rxjava
- Rxjava 、Retrofit、Okhttp整合
- Rxjava+ReTrofit+okHttp深入浅出
- RxJava+Retrofit+OkHttp实战
- Retrofit+Okhttp+RxJava
- retrofit+okhttp+rxjava
- Android OkHttp Retrofit RxJava
- RxJava+Retrofit+OkHttp+mvp
- 封装RxJava+Retrofit+OkHttp
- mvp+rxjava+retrofit+okhttp
- Retrofit + Rxjava + Okhttp
- MVP+Retrofit+Okhttp+RxJava
- Retrofit+Rxjava+Okhttp+MVP
- RxJava+Retrofit+okhttp实践结合
- Rxjava+Retrofit+okhttp+mvp实现
- Retrofit+Rxjava+okhttp基本使用
- Rxjava+retrofit+okhttp源码分析
- bfg.jar(清除 GIT commit 所有历史记录)
- 如何:定义和使用委托 (C++/CLI)
- java学习之路 之 反射机制-练习题
- java复习之集合
- LA3882 And Then There Was One
- retrofit+okhttp+rxjava
- 在树莓派上安装远程桌面服务
- Java 利用itext填写pdf模板并导出(亲自试过,没问题,并附上itextpdf-5.5.8.jar包和itext-asian.jar包))
- Android-开发艺术探索读书笔记之一
- 文章标题poj 1132: Border(模拟)
- React中文件夹中Index.js的作用
- 【C#笔记】sizeof()
- Integer的自动拆装箱的陷阱
- Servlet是什么