Получение активности от служебных классов - PullRequest
2 голосов
/ 21 августа 2011

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

Теперь я смотрю на настройку синглтона, который содержит ссылку на мою «стартовую» активность, а затем вводит этот синглтон в мои утилиты. Но, и это - но, я не контролирую, активность удалена или все еще активна, Android делает. Таким образом, моя активность может быть недостаточно живой, чтобы ее можно было использовать.

Итак, в заключение я не уверен, что хранить ссылку на действие безопасно, и не хочу пропустить текущее действие при каждом вызове. Каково решение. Я параноик? : -)

Спасибо заранее Roland

Ответы [ 2 ]

3 голосов
/ 21 августа 2011

Не храните ссылки на действия. Вместо этого вы можете использовать контекст приложения: есть только один, и он гарантированно будет доступен, пока ваше приложение живо. Для более легкого доступа вы можете определить класс Application и добавить к нему метод getInstance(). Проблема с этим подходом состоит в том, что не все операции, которые требуют контекста, могут быть выполнены с использованием контекста приложения. Все, что связано с представлениями, может потерпеть неудачу.

0 голосов
/ 21 августа 2011

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

Я бы не стал упоминать одиночную ссылку на вашу «стартовую» активность, поскольку первая активность вашего приложения может быть уничтожена, даже если последующая активность активна и видима.

Альтернативным подходом может быть реализация вашего собственного абстрактного класса (например, BaseActivity), реализующего или упаковывающего функциональность вашего служебного класса, от которого наследуются все другие ваши действия, а не Activity напрямую. Таким образом, вы можете держать сантехнику подальше от логики вашей основной деятельности.

...