Rxjava的線程切換與異步操作

Rxjava的線程切換與異步操作

傳統Android開發中,我們可以透過Handler/Thread等方式來做異步操作,那在RxJava中,假設我們想要做Thread的切換我們應該怎麼做呢?基本上是透過 observeOnsubscribeOn 這兩個操作符,去實作所謂的線程切換與異步操作。

observeOn 與 subscribeOn 。

什麼是 observeOn :

specify the Scheduler on which an observer will observe this Observable

指定一個觀察者在特定的 Scheduler 上觀察這個 Observable 。

什麼是 subscribeOn :

specify the Scheduler on which an Observable will operate

指定這個 Observable 自身在哪一個特定的 Scheduler 上操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

Observable.just(1)
.map(integer -> {
Log.i("Rxjava", "map-1:"+Thread.currentThread().getName());
return integer;
})
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.newThread())
.doOnSubscribe(s -> {
Log.i("Rxjava", "doOnSubscribe:"+Thread.currentThread().getName());
})
.doOnNext(next -> {
Log.i("Rxjava", "doOnNext:"+Thread.currentThread().getName());
})
.subscribe(
x -> {
Log.i("Rxjava", "next-1:"+Thread.currentThread().getName());
}
);

以上面的代碼為例子,map的操作符會在newThread做操作,doOnSubscribe/doOnNext 都會在 mainThread做操作,透過這樣兩個簡單的操作符可以很簡單的去做Rxjava的線程調度。