我正在寻找android robospice库如何管理活动生命周期的技术答案。从入门页面开始:
https://github.com/octo-online/robospice/wiki/Starter-Guide
“作为Activity(或其他上下文)的内部类,添加一个将更新UI的RequestlListener。不要担心内存泄漏,RoboSpice会管理您活动的生命周期。”
我的问题是robospice如何自动更新请求侦听器,以便它仍然能够在轮换后以及在活动被销毁并重新创建为新实例之后使用正确的上下文调用正确的侦听器?
我一直试图对源代码进行反向工程,但还没有找到答案:
答案 0 :(得分:9)
@Take Chances Make Cha。你说的是完全正确的。 RS的设计充分考虑了这一需求:管理网络请求和活动的生命周期。
@ craigrs84。基本上,RS会发生的情况是,当处理请求时,只要关联的活动处于活动状态,就会调用其侦听器。如果活动不再存在,则其所有侦听器都将从RS上拔下,并且不会通知他们。
RS的主要目的是确保没有内存泄漏:您的活动,如果必须死亡,将死亡并被垃圾收集,RS不会持有任何可以防止垃圾收集的硬引用。这真的是RoboSpice背后的核心理念。
如果您希望将活动的新实例重新插入待处理请求(例如,您执行请求,然后旋转设备,然后获取活动的新实例,并希望该新实例接收结果对于前一个实例执行的请求,可以使用RS。
在这种情况下,在调用spiceManager.start(..)之后立即使用方法spiceManager.addListenerIfPending
。这不会执行新请求,而是将新侦听器重新插入待处理请求。如果没有待处理的请求,则它将不执行任何操作。
答案 1 :(得分:2)
根据我的经验,简短的答案是它没有。
例如,如果不调用SpiceManager.shouldStop()
并执行请求,则仍会保留对RequestListener的引用,并且当它尝试更新其中引用的内容时,可能会导致内存泄漏。您的活动/片段/服务不再存在。