在Retrofit网络请求中,使用 Schedulers.newThread()
和 Schedulers.io()
有什么好处?我看到很多示例使用 io()
,但我想了解原因。
示例情况:
observable.onErrorResumeNext(refreshTokenAndRetry(observable))
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())...
对抗
observable.onErrorResumeNext(refreshTokenAndRetry(observable))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())...
我看到的其中一个原因是 -
newThread()
为每个工作单元创建一个新线程。io()
将使用线程池。
但这个参数对应用程序有什么影响?还有哪些方面需要考虑?
Schedulers.io
的线程池? - IgorGanapolskySchedulers.io()
同时需要处理大量工作,可能会遇到操作系统的I/O限制(例如最大打开文件数、最大TCP连接数,这些连接可能会在被处理后一段时间内仍保持打开状态以确保可靠性)。每个新线程也需要一定数量的RAM(大于512K但约为1M),因此可能会耗尽RAM。 - Dave Moten