我有一个奇怪的问题似乎与Retrofit有关。
假设我有一个只有一个Activity的示例应用。它还在windowBackground
中将styles.xml
设置为红色。
现在我在onCreate
中执行类似的操作:
public void onCreate() {
retrofit.foo()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ response ->
// ignore
}, { error ->
finish()
})
}
要测试它,我正在运行此应用,没有互联网连接,所以它总是调用onError
。
我希望在我启动应用后,它会显示红色背景,尝试发出请求,然后会调用finish()
并关闭活动。
在功能上它似乎工作正常,但在视觉上有一个奇怪的问题。它显示红色背景,然后它变黑了片刻,然后再次变红,最后应用程序关闭。
我尝试用一个简单的observable替换Retrofit调用,该observable在一段延迟后发出错误并且它正常工作(没有黑色背景)。这就是为什么我认为这与Retrofit有关。
如果我onErrorResumeNext
并在finish()
中呼叫onNext
,则行为相同。但如果我有互联网连接并且呼叫成功,则没有黑色背景。似乎在发生非http错误时会发生某些事情。
经过一番调查后,我注意到它可能不是OkHttp的错。我在Obsevable.create
中包含了OkHttp调用,当它发出错误时我调用了finish()
。在这种情况下没有黑屏。仅在使用Retrofit时。我也试过在没有RxJava的情况下使用Retrofit - 简单call.enqueue
并且它无法正常工作(显示黑屏)。
我正在使用Retrofit 2.0.2和RxJava适配器。我在Android 5.1.1上重现了这个问题。
答案 0 :(得分:0)
我认为你可能遇到的问题是活动动画。尝试使用
禁用活动动画public void onCreate() {
retrofit.foo()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ response ->
// ignore
}, { error -> {
finish();
overridePendingTransition(0, 0);
}
})
}