2016-07-14 39 views
3

我有一個奇怪的問題,似乎與改造有關。改造請求完成後會發生什麼?

假設我有一個只有一個Activity的示例應用程序。它也有windowBackgroundstyles.xml中設置爲紅色。 現在我做這樣的事情在onCreate

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

爲了測試我運行這個程序,沒有互聯網連接,所以它總是調用onError

我希望在我啓動應用程序後,它會顯示紅色背景,嘗試提出請求,然後它會調用finish()並且Activity將被關閉。 功能上它似乎工作正常,但視覺上有一個奇怪的問題。它顯示紅色背景,然後它變黑一會,然後再次變紅,最後該應用程序關閉。

我試圖用一個簡單的可觀察性來替換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

因此,紅色背景設置在佈局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

忘了提及我已經試過:) –

相關問題