使用Rxjava Schedulers.newThread()与Schedulers.io()进行改造
在Retrofit
networking请求中使用Schedulers.newThread()
vs Schedulers.io()
什么好处。 我见过很多使用io()
例子,但我想明白为什么。
示例情况:
observable.onErrorResumeNext(refreshTokenAndRetry(observable)) .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread())...
VS
observable.onErrorResumeNext(refreshTokenAndRetry(observable)) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread())...
我看到的原因之一是 –
newThread()
为每个工作单元创build一个新的线程。 io()
将使用线程池
但是这个说法对应用程序有什么影响呢? 还有其他的方面呢?
你是正确的,使用Schedulers.io()
的好处在于它使用线程池,而Schedulers.newThread()
没有。
你应该考虑使用线程池的主要原因是他们维护了一些空闲并等待工作的预创build线程。 这意味着当你有工作要完成的时候,你不需要经历创build线程的开销。 一旦你的工作完成,该线程也可以重新用于未来的工作,而不是不断创build和销毁线程。
创build线程的开销可能会很大,所以最小化正在创build的线程数通常是很好的。
有关线程池的更多信息,我build议:
- Java中的线程池有什么用?
- 什么是线程池?
- 线程池模式(维基百科)