【发布时间】:2015-11-20 08:17:33
【问题描述】:
有没有办法告诉 java rx 在 observeOn 函数中使用当前线程?我正在为 android 同步适配器编写代码,我希望在同步适配器线程中而不是在主线程中观察结果。
使用 Retrofit + RX Java 的示例网络调用如下所示:
MyRetrofitApi.getInstance().getObjects()
.subscribeOn(Schedulers.io())
.observeOn(<current_thread>)
.subscribe(new Subscriber<Object>() {
//do stuff on the sync adapter thread
}
我尝试使用
...
.observeOn(AndroidSchedulers.handlerThread(new Handler(Looper.myLooper())))
...
这与 android rx 为主线程创建调度程序的方式相同,但一旦我将 Looper.myLooper() 替换为 Looper.getMainLooper(),它就不再工作了。
我可以使用 Schedulers.newThread(),但由于它与大量服务器调用的复杂同步代码,我会不断创建一个新线程来触发新的网络调用,该调用再次创建新线程以启动更多网络调用。有没有办法做到这一点?还是我的方法本身完全错误?
【问题讨论】:
-
这有点投机,所以我不会将其发布为答案:从版本 2.0-beta2 开始,Retrofit 不再将网络请求放在不同的线程上 - 请参见此处:github.com/square/retrofit/commit/…因此,如果您使用的是当前版本的 Retrofit,您应该可以完全跳过
subscribeOn和observeOn,而一直保持在同步适配器线程上。还是我误解了您的问题,您确实想创建新线程,但它们应该都返回到您开始的线程? -
你解决了吗?
标签: rx-java android-syncadapter rx-android