我提到了this answer already,它似乎与Retrofit v1有关。
目标 - > 通过使ObjectMapper在非主线程上工作来减少冷启动时间。 This image显示主线程上发生的堆栈跟踪。
设定:
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的解决方案是什么?
可能相关的帖子
答案 0 :(得分:0)
我没有使用Retrofit 1.x,但是在v2中你可以将返回类型定义为Response
对象(即Observable<Response<SomeSerializableObject>>
而不是Observable<SomeSerializableObject>
)..这样,反序列化不应该发生,直到用户在其上调用.body()
方法。这样,您可以通过observeOn
运算符修改流,以便在map
运算符中对指定的调度程序进行反序列化。
我无法保证它在Retrofit 1.x中的可能性,但你应该能够轻松地进行研究。