首页>Program>source

我正在寻找有关android robospice库如何管理活动生命周期的技术解答.在入门页面上:

https://github.com/octo-online/robospice/wiki/Starter-Guide

"作为Activity(或其他上下文)的内部类,添加一个RequestlListener来更新您的UI。不必担心内存泄漏,RoboSpice会管理您的活动的生命周期。"

我的问题是robospice如何自动更新请求侦听器,以便轮换后以及活动被销毁并重新创建为新实例后,它仍能够使用正确的上下文调用正确的侦听器?

我一直在尝试对源代码进行逆向工程,但是还没有找到答案:

https://github.com/octo-online/robospice

最新回答
  • 9天前
    1 #

    @Take 机会使茶.您所说的完全正确.设计RS时就考虑到了这种明确的需求:管理网络请求和活动的生命周期。

    @ craigrs84.基本上,RS会发生的情况是,在处理请求时,只要关联的活动仍处于活动状态,它的侦听器就会被调用.如果该活动不再存在,则将其所有侦听器都从RS上拔下,并且不会收到通知。

    RS的主要目的是确保没有内存泄漏:您的活动(如果必须终止)将终止并被垃圾回收,RS没有对其进行任何硬引用以防止垃圾回收 .这确实是RoboSpice背后的核心思想。

    如果您希望将活动的新实例重新插入到待处理的请求中(例如,您执行一个请求,然后旋转设备,然后获得活动的新实例,并希望该新实例接收结果 前一个实例执行的请求),RS可以实现。

    在这种情况下,请使用 spiceManager.addListenerIfPending方法   在启动时,紧接在调用spiceManager.start(..)之后.这不会执行新的请求,而是将新的侦听器重新插入挂起的请求.如果没有待处理的请求,那么它将什么都不做。

  • 9天前
    2 #

    根据我的经验,简短的回答是没有.

    例如,如果您不致电 SpiceManager.shouldStop()   并执行一个请求,对RequestListener的引用仍会保留,并且如果您的Activity / Fragment / Service不再存在,它会尝试更新其中引用的内容,从而导致内存泄漏。

  • java:两个Calendar对象的小时数差异
  • python 3.x:自动将散景图拟合到屏幕上?