Получение активности от служебных классов

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

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

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

Заранее спасибо Роланд

2 ответа

Решение

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

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

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

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

Другие вопросы по тегам