Android 若应用程序进入后台,然后进入前台,Robospice请求永远不会结束?

Android 若应用程序进入后台,然后进入前台,Robospice请求永远不会结束?,android,robospice,Android,Robospice,我正在开发一个应用程序,使用RoboSpice库调用RESTAPI。除了一件事,图书馆的一切都很好。我不使用RoboSpice中可用的缓存,因此所有请求都是在没有缓存的情况下发出的。现在,当任何请求正在进行,并且用户按下home按钮时,将调用onStop(),其中将调用spice manager的shouldStop(),这将注销所有请求侦听器以进行通知。当应用程序再次出现在前台时,UI更新不会发生,因为未通知侦听器 我不想使用Robospice提供的缓存。有没有其他方法可以在不使用缓存的情况下

我正在开发一个应用程序,使用RoboSpice库调用RESTAPI。除了一件事,图书馆的一切都很好。我不使用RoboSpice中可用的缓存,因此所有请求都是在没有缓存的情况下发出的。现在,当任何请求正在进行,并且用户按下home按钮时,将调用onStop(),其中将调用spice manager的shouldStop(),这将注销所有请求侦听器以进行通知。当应用程序再次出现在前台时,UI更新不会发生,因为未通知侦听器


我不想使用Robospice提供的缓存。有没有其他方法可以在不使用缓存的情况下获取UI更新通知

机器人世界显然不可能做到这一点,事实上,有一个很好的理由:这将是一个非常糟糕的主意

当您的活动停止(在桌面上)时,Android希望对其实例进行垃圾收集。要做到这一点,它不应该被任何东西引用。这就是为什么RS强制要求删除所有侦听器。通常,侦听器持有对活动的引用(作为内部类),RS的最佳成就是让活动正确地消亡并得到垃圾收集

所以,做你想做的事情显然会导致内存泄漏,而且在大多数情况下还会导致崩溃:当一个活动不再显示时,你想更新它的UI吗?看起来有点古怪,不是吗


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

我同意RS这样做是有原因的。但是,想象一下,已经发出了一个请求,显示了进度对话框,用户按下了home按钮。REST调用将正常进行,当用户启动应用程序时,由于未注册侦听器,因此UI未更新,因此进程对话框未消失。无论如何,使用缓存似乎是目前RS的唯一方法。另一种方法可以是在onDestroy中调用spiceManager.shouldStop(),并在onCreate()中启动spiceManager。由于onDestroy()是活动被终止时将得到的最后一个调用。@mobiledev,我认为第二个解决方案再好不过了。服务绑定非常棘手,首选的方法是使用onStart/onStop。您可能对从服务而不是活动发出请求感兴趣。我认为RS已经使用服务发出了请求。无论如何,我会看看是否可以使用缓存。当然可以,但启动上下文也可以是服务,而不仅仅是活动或片段。因此,您将有一个更长寿命的上下文来执行您的请求并获得活着的侦听器。例如,服务可以更新通知,显示进度。