我有一个奇怪的问题,似乎与改造有关。改造请求完成后会发生什么?
假设我有一个只有一个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'参数,不做任何事情,看看是否仍然发生。如果它仍然发生,那么它是观察者 - 观察者同步机制冻结主线程。 –