RxJava中的线程转换主要经过下面两个方法:app
1.subscribeOnspa
2.observeOn线程
1、subscribeOncode
1.调用一次subscribeOn时:server
Observable observable;
Schedulers schedulers;
Observer observer;
observable.subscribeOn(schedulers).subscribe(observer)
经过解析源码可转化为:blog
observer.onSubscribe();
schedulers线程{
observable.subscribe(observer)
}
在原线程调用observer的onSubscribe 方法,并在schedulers的线程中调用observable 的subscribe 方法。源码
2.当屡次调用subscribeOn时:io
Observable observable;
Schedulers schedulers1;
Schedulers schedulers2;
Observer observer;
observable.subscribeOn(schedulers1)
.subscribeOn(schedulers2)
.subscribe(observer)
可转化为:function
observer.onSubscribe();
schedulers2线程{
schedulers1线程{
observable.subscribe(observer)
}
}
因此subscribOn只有第一次有效。class
2、observeOn
1.调用一次observeOn
Observable observable;
Schedulers schedulers;
Observer observer;
observable.observeOn(schedulers).subscribe(observer)
可转化为:
observer.onSubscribe();
schedulers线程{
observer.next()
observer.complete()
}
当屡次调用observeOn时:
Observable observable;
Schedulers schedulers1;
Schedulers schedulers2;
Observer observer;
observable.observeOn(schedulers1)
.observeOn(schedulers2)
.subscribe(observer)
可转化为:
observer.onSubscribe();
schedulers1线程{
schedulers2线程{
observer.next()
observer.complete()
}
}
当时用map操做符时:
observable.map()
.observeOn(schedulers1)
.map(function)
.observeOn(schedulers2)
.subscribe(observer)
可转化为:
observer.onSubscribe();
schedulers1线程{
function.apply()
schedulers2线程{
observer.next()
observer.complete()
}
}