如何观察java rx中的调用线程?

有无论如何告诉java rx使用observeOn函数中的当前线程? 我正在编写android syncadapter的代码,我希望在同步适配器线程中观察结果,而不是在主线程中观察结果。

使用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(),但作为其复杂的同步代码与大量的服务器调用,我会不断创建一个新的线程来发起新的网络调用,再次创建新的线程来发起更多的网络调用。 有没有办法做到这一点? 或者我的方法本身完全错误?


尝试使用Schedulers.immediate()

MyRetrofitApi.getInstance().getObjects()
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.immediate())
.subscribe(new Subscriber<Object>() {
    //do stuff on the sync adapter thread

}

它的描述如下: Creates and returns a Scheduler that executes work immediately on the current thread.

注意:
我认为保留SyncAdapter线程上的所有工作是可以的,因为它已经使用了不同的线程


哦,我刚刚在维基上找到了这个:https://github.com/ReactiveX/RxAndroid#observing-on-arbitrary-threads

new Thread(new Runnable() {
    @Override
    public void run() {
        final Handler handler = new Handler(); // bound to this thread
        Observable.just("one", "two", "three", "four", "five")
                .subscribeOn(Schedulers.newThread())
                .observeOn(HandlerScheduler.from(handler))
                .subscribe(/* an Observer */)

        // perform work, ...
    }
}, "custom-thread-1").start();

我认为这也适用于你的情况 - 除了创建一个新的线程,当然......只是:

final Handler handler = new Handler(); // bound to this thread
MyRetrofitApi.getInstance().getObjects()
    .subscribeOn(Schedulers.io())
    .observeOn(HandlerScheduler.from(handler))
    .subscribe(new Subscriber<Object>() {
        //do stuff on the sync adapter thread

    }
链接地址: http://www.djcxy.com/p/88955.html

上一篇: How to observeOn the calling thread in java rx?

下一篇: Custom filter vs filter function in controller performance comparison