2016-07-14 41 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

忘了提及我已经试过:) –

相关问题