最近在学RxJava,发现还是很重要的,但是自己也只学会了如何用RxJava在子线程中执行耗时操作再通知主线程更新UI,所以先记录下如何用RxJava实现多线程耗时操作,因此这篇只贴代码。
一、RxJava介绍
RxJava是一个基于事件订阅的异步执行的一个类库。是一个近几年很流行的异步开发框架。主要特点有:
- 异步的
- 基于观察者设计模式(Observer、Observable)
- Subscribe(订阅)
二、RxJava多线程耗时操作
- 添加依赖,注意版本,如果需要的话将compile换成implementation。
compile 'io.reactivex:rxjava:1.0.14'
compile 'io.reactivex:rxandroid:1.0.1’
- 耗时操作(如下载,UI更新倒计时)
public String longRunningOperation() { //隔1s更新UI
try {
Thread.sleep(1000);
}
catch (InterruptedException e) {
}
return "Complete!";
}
- 观察者模式
- 对于任何 Observable 你可以定义在两个不同的线程
- 使用 Observable.observeOn可以定义在一个线程上, 可以用来监听和检查从 Observable 最新发出的 items (Subscriber 的 onNext,onCompleted 和 onError 方法会执行在 observeOn 所指定的线程上)
- Observable.subscribeOn() 来定义一个线程,将其运行我们 Observable 的代码(长时间运行的操作)。
//创建被观察者
Observable operationObservable = Observable.create(new Observable.OnSubscribe() {
@Override
public void call(Object o) {
while(true){
Subscriber subscriber = (Subscriber)o;
String ret = longRunningOperation();
subscriber.onNext(ret);
}
}
}).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread());
operationObservable.subscribe(new Subscriber() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Object o) {
//UI线程操作
}
});