我正在使用Retrofit为我的异步网络调用返回rxjava Observable .
我发现自己重复以下调用:
someApiCall().subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
好像我总是订阅IO线程并观察Android主线程 . 这似乎是我发现的所有资源的最佳实践 . 也许除了长时间运行的计算之外,我不太明白何时我们想要偏离这种模式 .
有没有办法通过默认subscribeOn和observeOn线程来删除这个样板?
这是rxjava plugins的用例吗? (我找不到很多使用它们的例子 . )
我可以通过弄乱retrofit executors来设置网络边界的默认线程吗?
3 回答
对于
Observable
响应,Retrofit当前将subscribeOn
设置为RestAdapter
的HTTP执行程序(提供或默认) . 这样做是为了将RxJava支持填充到现有行为中 .2.0的计划是提供明确设置
subscribeOn
和observeOn
的默认值的能力(无论是两者,只有一个,还是两者都没有) .例如,如果您需要将多个API调用链接在一起,那么您不希望总是希望在主线程上进行观察的原因 .
改造版本2.0.0-beta2(2015-09-28)的Change Log显示在后台运行需要subscribeOn() .
Yes ,可以删除这两个电话 .
这是改装适配器类,它自动调度
subscribeOn
和observedOn
以在每次调用时不需要样板调用:然后在配置改造时使用此适配器:
我写了this blog post,详细介绍了这里发生的事情 .
这将删除两个调用,我认为是样板 . 我认为Jake将后台调用链接在一起的场景并不真正适用,因为在这种情况下我会进行改进同步调用而根本不使用调度程序 .