72
進行改造使用Schedulers.newThread()
與Schedulers.io()
的Retrofit
網絡請求有什麼好處。我見過很多使用io()
的例子,但我想明白爲什麼。使用Rxjava Schedulers.newThread()vs Schedulers.io()
示例情況:
observable.onErrorResumeNext(refreshTokenAndRetry(observable))
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())...
VS
observable.onErrorResumeNext(refreshTokenAndRetry(observable))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())...
一個我所看到的原因是 -
newThread()
創建工作的各單位一個新的線程。 io()
將使用線程池
但是該參數對應用程序有什麼影響?還有什麼其他方面?
可能是值得加入約Scheduler.io()評論是基於一個無界線程池可能不適合某些用例。請參閱http://stackoverflow.com/questions/31276164/rxjava-schedulers-use-cases –
@DaveMoten通過'Schedulers.io',哪些用例不適合線程池? –
如果你有很多與'Schedulers.io()'並行的工作,那麼你可能會碰到操作系統的I/O限制(例如打開文件的最大數量,出於可靠性目的可能保持打開的最大TCP連接數甚至在處置之後的一段時間)。每個新線程還需要最少數量的RAM(> 512K,但工作在1M),因此可能會耗盡內存。 –