2016-07-14 10 views
3

Retrofitに関連すると思われる奇妙な問題があります。Retrofit要求が完了した後はどうなりますか?

アクティビティが1つしかないサンプルアプリがあるとします。また、styles.xmlには、赤色に設定されたwindowBackgroundがあります。

public void onCreate() { 
    retrofit.foo() 
     .subscribeOn(Schedulers.io()) 
     .observeOn(AndroidSchedulers.mainThread()) 
     .subscribe({ response -> 
      // ignore 
     }, { error -> 
      finish() 
     }) 
} 

は、私はインターネットに接続せずに、このアプリを実行していることをテストするには、それは常にonErrorを呼び出します。 は、今私はonCreateにこのような何かを行います。

アプリを起動すると、赤い背景が表示され、リクエストを行い、finish()が呼び出され、アクティビティが終了します。 機能的には正常に動作するようですが、視覚的には奇妙な問題があります。それは赤い背景を示し、それはしばらくの間黒に変わってからもう一度赤に変わり、最後にアプリケーションが閉じられます。

私はRetrofitコールを若干遅れてエラーを出すシンプルなオブザーバブルに置き換えようとしましたが、正しく動作しました(黒い背景なし)。そういうわけで、Retrofitに関連するものだと思うのです。 onErrorResumeNextを実行してfinish()onNextに呼び出した場合の動作は同じです。しかし、もし私がインターネット接続を持っていて、呼び出しが成功すれば、黒い背景はありません。 http以外のエラーが発生したときに何かが起きているようです。

調査したところ、おそらくOkHttpの欠陥ではないことに気付きました。私はObsevable.createでOkHttpコールをラップし、エラーが発生したときに私はfinish()と呼んだ。この場合、黒い画面はありません。 Retrofitを使用している場合のみ。私はまた、RxJavaなしでRetrofitを使ってみました - 簡単なcall.enqueueそしてそれは正しく動作していません(黒い画面が表示されています)。

RxJavaアダプターでRetrofit 2.0.2を使用しています。 Android 5.1.1でこの問題を再現しました。

+0

赤い背景がレイアウトxmlに設定されていますか?あなたは自分のどこにも黒い背景を設定していますか?メインスレッドであまりにも多くを実行しようとすると、黒いbgが表示される可能性はありますか? –

+0

背景は、windowBackground属性を使用してAppのテーマに設定されます。アクティビティにはレイアウトが全くありません。たぶんあなたは正しいと主なスレッドであまりにも多くの仕事がありますが、それは私の仕事ではありません。上記以外のコードはありません。 –

+0

'subscribe'パラメータを修正して、何もしないようにして、まだ起こっているかどうか確認してください。それでも起こった場合、それは観測可能なオブザーバの同期メカニズムでメインスレッドをフリーズさせます。 –

答えて

0

あなたが問題を抱えている可能性があるのは、アクティビティアニメーションです。アクティビティアニメーションを無効にしてみてください

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

私はすでに試したことを忘れています:) –

関連する問題