subscribeOn如何工作

时间:2017-10-12 06:18:04

标签: android rx-java2

我对 Observable.just("Hello") .map(s -> { Log.d(TAG, s + " in " + Thread.currentThread()); return 1; }) .subscribeOn(Schedulers.newThread()) .map(integer -> { Log.d(TAG, integer + " in " + Thread.currentThread()); return true; }) .map(aBoolean -> { Log.d(TAG, aBoolean + " in " + Thread.currentThread()); return 11.0; }) .subscribeOn(Schedulers.computation()) .subscribe(aDouble -> { Log.d(TAG, "accept in " + Thread.currentThread()); Log.d(TAG, "accept: " + aDouble); }); 运营商的工作有些怀疑。我读了一些关于此的文章。

Hello in Thread[RxNewThreadScheduler-1,5,main] 1 in Thread[RxNewThreadScheduler-1,5,main] true in Thread[RxNewThreadScheduler-1,5,main] accept in Thread[RxNewThreadScheduler-1,5,main] accept: 11.0 非常容易理解,它只会更改downstram,而更改会影响所有subscribeOn

但正如文章 subscribeOn can be put in any place in the stream because it affects only the time of subscription.中所述:

为了理解这一点,我做了一个samlpe并尝试在每个时间点记录线程。

<text>

结果是

<svg>

<text x="10" y="10">text</text>

</svg>

这里两次我正在应用int[][][] array = new int[5][][]; // fill with data here bool result = array[0]?.[3]?.[2] ?? == 3; ,但每次第一次添加的似乎都应用于整个流。

任何人都可以用简单的词语解释它是如何运作的,因为我是初学者,很难消化它!

提前致谢

1 个答案:

答案 0 :(得分:2)

subscribeOn:如果您有多个subscribeOn,则第一个生效。如果您想在制作subscribeOn后更改流上的计划程序,请查看observeOn

observeOn:它将调度程序更改为下游。

例如:

just("Some String") // Computation
  .subscribeOn(Schedulers.computation()) // it changes scheduler to computation beginning from source to observer.
  .map(str -> str.length()) // Computation
  .observeOn(Schedulers.io) //change the scheduler from here till the observer
  .map(length -> 2 * length) // io
  .subscribe(number -> Log.d("", "Number " + number));// io