Получение активности от служебных классов
У меня есть общая проблема в моем приложении, где я извлекаю функциональность в классы, которые обрабатывают эту функциональность, и ничего больше. Проблема в том, что мне часто нужен экземпляр Activity для большей части этой функциональности, например, для чтения файлов, доступа к базе данных и т. Д., Поэтому мне приходится передавать текущую активность в утилиту, и это делает код уродливым.
Сейчас я пытаюсь настроить синглтон, который содержит ссылку на мою "стартовую" активность, а затем внедрить этот синглтон в мои утилитеты. Но, и это - то, но, я не контролирую, активность удалена или все еще активна, Android делает. Таким образом, моя активность может быть недостаточно живой, чтобы ее можно было использовать.
Итак, в заключение я не уверен, что хранить ссылку на действие безопасно, и не хочу пропустить текущую активность при каждом вызове. Каково решение. Я параноик?:-)
Заранее спасибо Роланд
2 ответа
Не храните ссылки на мероприятия. Вместо этого вы можете использовать контекст приложения: есть только один, и он гарантированно будет доступен, пока ваше приложение живо. Для более легкого доступа вы можете определить Application
класс и добавить getInstance()
метод к этому. Проблема этого подхода заключается в том, что не все операции, для которых требуется контекст, могут выполняться с использованием контекста приложения. Все, что связано с представлениями, может потерпеть неудачу.
Вы правы, что для многих операций Android требуется Activity
или (чаще) просто Context
, При условии, что ваши служебные классы не держат ссылки за пределами жизненного цикла Context
тогда у тебя все будет хорошо.
Я бы не стал упоминать одиночную ссылку на вашу "стартовую" активность, так как первая активность вашего приложения может быть уничтожена, даже если последующая активность активна и видима.
Альтернативный подход может заключаться в реализации вашего собственного абстрактного класса (например, BaseActivity
) реализации или обёртывания функциональности вашего служебного класса, от которого наследуются все остальные виды деятельности, а не Activity
непосредственно. Таким образом, вы можете держать сантехнику подальше от логики вашей основной деятельности.