1

我已经提到过这个答案,它似乎与 Retrofit v1 相关。

目标 -> 通过使 ObjectMapper 在非主线程上工作来减少冷启动时间。此图像显示了它在主线程上发生的堆栈跟踪。

设置:

compile "com.squareup.retrofit2:retrofit:2.1.0"
compile "com.squareup.retrofit2:converter-jackson:2.1.0"
compile "com.squareup.retrofit2:adapter-rxjava:2.1.0"
compile 'io.reactivex:rxjava:1.1.9'

这是改造的配置

.addCallAdapterFactory(RxJavaCallAdapterFactory.createWithScheduler(Schedulers.io()))
.addConverterFactory(JacksonConverterFactory.create(ObjectMapperFactory.getObjectMapper()))

下面是一个典型的网络调用示例

compatibilityService().isCompatible()
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(response -> { ...});

JacksonConverterFactory中,对象映射似乎在主线程上工作。

不离开 RxJava 的解决方案是什么?

可能相关的帖子

4

1 回答 1

0

我没有使用 Retrofit 1.x,但是在 v2 中,您可以将返回类型定义为Response对象(即Observable<Response<SomeSerializableObject>>,而不是Observable<SomeSerializableObject>).. 这样,在用户调用.body()它的方法之前,不应该发生反序列化。这样,您可以通过observeOn运算符修改流,以便它在map运算符中指定的调度程序上反序列化。

我不能保证它在 Retrofit 1.x 中也是可能的,但你应该能够轻松地研究它。

于 2016-12-29T19:14:36.677 回答