将代码的最后一部分重写为:
service.getOneTestRx() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Subscriber() { @Override public void onCompleted() { Log.d(TAG, "[onCompleted] "); } @Override public void onError(Throwable t) { Log.d(TAG, "[onError] "); t.printStackTrace(); } @Override public void onNext(MyTest m) { Log.d(TAG, "[onNext] " + m.toString()); } });
来自@akarnokd的重要提示:
值得一提的是,需要将调用链接到此处,因为Observable不是构建器模式(您修改现有对象的设置)
你应该打电话Observable.unsubscribeOn(Schedulers.io())
,retrofit
在http请求结束时取消订阅.
在RxJavaCallAdapterFactory
中retrofit-rxjava-adapter
它是这样的行动.
if (!subscriber.isUnsubscribed()) { subscriber.onCompleted(); }
但是,当subscriber
是SafeSubscriber
,它会调用unsubscribe
最后.
我在我的应用程序中遇到此问题.
完整代码:
o.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .unsubscribeOn(Schedulers.io());