在我们的日常开发中,我们可能会经常涉及到线程的切换,比如:需要在子线程中加载数据库中的数据,一般情况下,我们会这样做:
new Thread(new Runnable() {
@Override
public void run() {
//do something
}
}).start();
高效一点的会用线程池来实现。但是有一种情况下是很麻烦的-子线程和主线程有执行顺序或者有交互的时候,这时候我们一般借助Handler机制来实现或者调用Activity的runOnUiThread(new Runnable(){})
。但是今天我们来介绍一种利用RxJava实现的主线程、子线程快速切换的方法。
子线程执行
定义一个子线程执行的任务接口
public interface IOTask<T> {
void doOnIOThread();
}
在RxScheduler中定义一个在doOnIOThread
方法,利用observeOn
来切换执行的线程
public static <T> void doOnIOThread(final IOTask<T> task) {
Observable.just(task)
.observeOn(Schedulers.io())
.subscribe(new Action1<IOTask<T>>() {
@Override
public void call(IOTask<T> tioTask) {
tioTask.doOnIOThread();
}
}, new Action