2

У меня есть singleton, который хранит некоторую разумную информацию о пользователе моего приложения. В настоящий момент он хранит логин пользователя и местоположение пользователя.Самый быстрый способ использования BroadcastReceiver в одном и том же тоне и более

1) Местоположение расположено через Службу. В настоящий момент Служба ссылается на мой синглтон напрямую, чтобы заполнить долготу и широту. Я хотел бы использовать BroadcastReceiver для отправки широковещательной передачи, которую singleton слышит и использует для обновления значений.

Однако, чтобы зарегистрировать BroadcastReceiver, мне нужен контекст в моем синглетоне. Какой самый гладкий способ добиться того, чего я хочу. Возможно, BroadcastReceiver не является подходящим объектом?

2) Кроме того, с какими проблемами я сталкиваюсь с использованием синглета? Я предполагаю, что Android, возможно, вернет эту память в любой момент времени (что, очевидно, было бы плохо); так как я могу это предотвратить? Пропустит ли контекст приложения и сохранит его в переменной-члене?

В документации на Android говорится: «Но жизненный цикл статики не очень под вашим контролем, поэтому, чтобы придерживаться модели жизненного цикла, класс приложения должен инициировать и разрушать эти статические объекты в onCreate () и onTerminate() класса Application, но я не совсем уверен, как это сделать.

ответ

5

Однако, чтобы зарегистрировать BroadcastReceiver, мне нужен контекст в моем синглетоне. Что такое самый быстрый способ добиться того, чего я хочу. Возможно, BroadcastReceiver не соответствует> объекту?

«Самый гладкий способ» - не делать то, что вы делаете. Пожалуйста, зарегистрируйтесь только BroadcastReceiver от Activity, Service, или возможно a Application. Вы должны отменить регистрацию этого BroadcastReceiver, когда Activity, Service, или Application уничтожен.

Я предполагаю, что Android, возможно, вернет эту память в любой момент времени (что было бы очевидно плохим); так как я могу это предотвратить?

У вас нет. Android оставляет за собой право прекратить процесс в любой момент (например, для восстановления памяти). Убийцы задач на Android 2.1 и предыдущие будут прекращать ваш процесс в любое время. Как только все компоненты вашего приложения будут уничтожены, Android может в любой момент переработать ваш процесс, одновременно очищая кучу. И так далее.

Только положите вещи в память, что вы не против потери.

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

Прошел бы в контексте приложения и сохранил бы его в переменной-члене thwart ?

No.

Андроида документации говорится: «Но, жизненный цикл статического не очень хорошо под контролем, поэтому придерживаться модели жизненного цикла, класс приложения должен инициировать и снести эти статические объекты в методах onCreate() и onTerminate() класса приложений ", но я не совсем уверен, как это сделать.

Создать подкласс Application и указать в декларации, что Android должны использовать его, с помощью атрибута на <application> элемента android:name.

+0

Спасибо за ваш вклад. Как бы вы порекомендовали «переносить»: эта информация? Вы предлагаете читать его из базы данных каждый раз, когда он (предположим, что «это» информация для входа, передаваемая с помощью веб-службы)? – Andrew

+0

Да, сохраните его в базе данных или в 'SharedPreferences' – Falmarri

+0

. Вы бы рекомендовали сохранить мой синглтон с переменными-членами, содержащими регистрационную информацию и создав метод в singleton для их получения, который либо возвращает запрашиваемое значение, либо , если он не установлен (т. е.: singleton был уничтожен и воссоздан), считывается из базы данных, устанавливается и возвращается? – Andrew

Смежные вопросы