Retrofit请求完成后会发生什么?

时间:2016-07-14 07:45:49

标签: android retrofit rx-java

我有一个奇怪的问题似乎与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上重现了这个问题。

1 个答案:

答案 0 :(得分:0)

我认为你可能遇到的问题是活动动画。尝试使用

禁用活动动画
public void onCreate() {
    retrofit.foo()
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe({ response ->
            // ignore
        }, { error -> {
                finish();
                overridePendingTransition(0, 0);
            }
        })
}