Как robospice управляет жизненным циклом деятельности?

Я ищу технический ответ на то, как библиотека robospice андроидов управляет жизненным циклом деятельности. С начала страницы:

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

«В качестве внутреннего класса вашей деятельности (или другого контекста) добавьте RequestlListener, который обновит ваш пользовательский интерфейс. Не беспокойтесь о утечке памяти, RoboSpice управляет жизненным циклом вашей деятельности».

Мой вопрос в том, как robospice автоматически обновляет прослушиватели запросов, чтобы он все еще мог вызывать правильный слушатель с правильным контекстом после поворота и после того, как действие было уничтожено и воссоздано как новый экземпляр?

Я пытался перепроектировать исходный код, но еще не нашел ответа:

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

Solutions Collecting From Web of "Как robospice управляет жизненным циклом деятельности?"

@Take Chances Make Cha. То, что вы говорите, совершенно прав. RS был разработан с учетом этой конкретной потребности: управление сетевыми запросами и жизненными циклами деятельности.

@ Craigrs84. В основном, что происходит с RS, заключается в том, что при обработке запроса его слушатели будут вызваны до тех пор, пока активная активность будет активна . Если активность больше не активна, все ее слушатели отключены от RS, и они не будут уведомлены.

Основная цель RS заключается в том, чтобы убедиться, что утечка памяти отсутствует: ваша деятельность, если она должна умереть, умрет и будет собрана мусор, RS не содержит никакой жесткой ссылки на нее, которая предотвратила бы сбор мусора. Это действительно основная идея RoboSpice.

Если вы хотите, чтобы новый экземпляр вашей активности был подгружен в ожидающий запрос (например, вы выполняете запрос, затем поворачиваете устройство, а затем получаете новый экземпляр своей активности и хотите, чтобы новый экземпляр получил результат запроса Выполненный предыдущим экземпляром), это возможно с помощью RS.

В этом случае используйте метод spiceManager.addListenerIfPending в начале, сразу после вызова spiceManager.start (..). Это не будет выполнять новый запрос, но повторно подключите нового прослушивателя к ожидающему запросу. Если запрос не выполняется, он ничего не сделает.

Короткий ответ, по моему опыту, заключается в том, что это не так.

Например, если вы не вызываете SpiceManager.shouldStop() и выполняете запрос, ссылка на RequestListener по-прежнему сохраняется, и вы можете столкнуться с утечкой памяти, поскольку она пытается обновить все, что указано в ней, если ваша активность / Фрагмент / Сервис больше не существует.