Skip to content

Instantly share code, notes, and snippets.

@zsxwing
Last active May 6, 2016 11:55
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save zsxwing/a82d9e477b04ec64e6df to your computer and use it in GitHub Desktop.
Save zsxwing/a82d9e477b04ec64e6df to your computer and use it in GitHub Desktop.
Observable.just(1)
.doOnSubscribe(() -> System.out.println("before 1st doOnSubscribe: " + Thread.currentThread().getName()))
.subscribeOn(Schedulers.newThread())
.doOnSubscribe(() -> System.out.println("before 2nd doOnSubscribe: " + Thread.currentThread().getName()))
.subscribeOn(Schedulers.io())
.doOnSubscribe(() -> System.out.println("before 3rd doOnSubscribe: " + Thread.currentThread().getName()))
.subscribeOn(Schedulers.computation())
.doOnSubscribe(() -> System.out.println("before subscribe: " + Thread.currentThread().getName()))
.subscribe(new Subscriber<Integer>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Integer integer) {
}
});
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Output:
before subscribe: main
before 3rd doOnSubscribe: RxComputationThreadPool-1
before 2nd doOnSubscribe: RxCachedThreadScheduler-1
before 1st doOnSubscribe: RxNewThreadScheduler-1
doOnSubscribe有什么用呢?doOnSubscribe可以通过subscribeOn来切换执行的线程。onStart做不了。
// 当前线程不是UI线程
Observable.create(...) // 这是一个IO操作
.subscribeOn(Schedulers.io())
.doOnSubscribe(() -> view.XXX) // 这是一个UI操作。
.subscribeOn(AndroidSchedulers.mainThread())
...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment