我有一個奇怪的問題,似乎與改造有關。改造請求完成後會發生什麼?
假設我有一個只有一個Activity的示例應用程序。它也有windowBackground
在styles.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上轉載了這個問題。
因此,紅色背景設置在佈局xml?您是否在應用程序的任何位置設置了黑色背景?當您嘗試在主線程中運行太多時,是否有可能顯示黑色的bg? –
使用windowBackground屬性在App的主題中設置背景。活動根本沒有佈局。也許你是對的,主線上的工作太多了,但這不是我的工作。我沒有其他代碼比我上面發佈的。 –
嘗試修改'subscribe'參數,不做任何事情,看看是否仍然發生。如果它仍然發生,那麼它是觀察者 - 觀察者同步機制凍結主線程。 –