2014-01-13 33 views
5

我正在开发一个使用RoboSpice库调用REST API的应用程序。除了一件事以外,一切正常。我不使用RoboSpice中的缓存,因此所有的请求都没有缓存。现在,当有任何请求正在进行并且用户按下home按钮时,调用onStop(),其中调用了spice manager的shouldStop(),它将取消注册所有请求侦听器以进行通知。当应用程序再次进入前台时,UI更新不会发生,因为侦听器尚未收到通知。Robospice请求永远不会结束,如果应用程序进入后台,然后来到前台?

我不想使用Robospice提供的Cache。有没有其他方式可以在不使用Cache的情况下获得UI更新通知?

回答

4

RoboSpice显然是不可能的,事实上,有一个很好的理由:这将是一个非常糟糕的主意。

当您的活动死亡(onStop)时,Android想要垃圾收集其实例。要做到这一点,它不应该被任何东西引用。这就是RS规定所有听众都被删除的原因。典型的听众持有对活动的引用(作为内部类),而RS最好的成就是让活动正确地死亡并获得垃圾收集。

因此,做你想做的事情很明显会导致内存泄漏,而且大多数时候会导致崩溃:当一个活动不再显示时,你想更新它的UI?看起来有点a,,不是吗?

也许最简单的办法是使用一个非常有限的缓存,或者只是在您的活动每次进入onStart时执行所有请求。

+1

我同意RS是这样做的原因。但是,想象一下已经提出请求并显示进度对话框,并且用户按下主页按钮。对REST的调用将会正常进行,当用户启动应用程序时,进度对话框并未消失,因为UI未更新,因为听众未注册。无论如何,似乎使用缓存是目前RS的唯一方法。 – mobiledev

+0

另一种方法是在onDestroy中调用spiceManager.shouldStop(),并在onCreate()中启动spicemanager。由于onDestroy()是一个活动在被杀害时会得到的最终调用。 – mobiledev

+0

@mobiledev,我不认为第二种解决方案更好。服务绑定真的很棘手,首选的地方是使用onStart/onStop。您可能有兴趣从服务而不是活动请求。 – Snicolas

相关问题