Долгосрочная ссылка на активность - жизненный цикл - PullRequest
0 голосов
/ 07 февраля 2012

Скажите, что у меня есть одноэлементный класс (Downloader), отвечающий за загрузку и сохранение файлов.Когда клиент запрашивает загрузку, он также должен предоставить обратный вызов.Мой вопрос касается хранения этих объектов обратного вызова.

Если у меня есть Activity, которая реализует интерфейс обратного вызова, а затем запрашивает несколько больших загрузок, класс Downloader будет хранить ссылку на Activity бесконечно долго.Что если до завершения загрузки запрашивающая их активность проходит жизненный цикл и уничтожается.

В этом случае загрузчик не позволит утилизатору собирать мусор.Я не против, чтобы запрошенные загрузки продолжались.Однако я хотел бы как-то обнаружить, что предоставленный обратный вызов должен быть собран, и я эффективно его пропускаю.

Существует ли шаблон проектирования для чего-то подобного?Я думал, что один из подклассов Reference будет полезен.

Спасибо.

1 Ответ

1 голос
/ 07 февраля 2012

Сделайте это наоборот, и вы можете держать их отключенными и избежать крайне нежелательной практики хранения ссылок на действия.

Я создал очень простой класс ServiceLocator, который хранит статические ссылки на все мои синглтоны иразрешает их по типу, но вы можете сделать это еще проще.Вам просто нужен класс, который содержит статическую ссылку на ваш загрузчик и предоставляет эту ссылку на ваши действия.Если вам нужно перезвонить в любой из ваших действий, используйте модель публикации / подписки, которую делает платформа Android (т. Е. setOnClickListener(OnClickListener listener)).

Загрузчик может иметь внутренний интерфейс под названием DownloadUpdateListener, единственный экземпляр этогоинтерфейс и метод регистрации и отмены регистрации для установки этого и удаления ссылки из ваших действий.Действие создаст экземпляр этого DownloadUpdateListener локально, поэтому у него есть доступ ко всем полям и представлениям действия.В Downloader убедитесь, что ваш слушатель не равен нулю, прежде чем вызывать его методы.Зарегистрируйте слушателя в onResume и не забудьте отменить его регистрацию в onPause

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...