Slickest Way использовать Broadcastreceiver в Singleton и более
-
03-10-2019 - |
Вопрос
У меня есть Singleton, который хранит некоторую разумную информацию о пользователе моего приложения. На данный момент он хранит вход пользователя и местоположение пользователя.
1) Расположение находится через сервис. На данный момент сервис ссылается на мой синглтон напрямую, чтобы начать долготу и широту в нее. Я хотел бы использовать широковещатель для отправки трансляции, что Singleton слышит и использует для обновления значений вместо этого.
Тем не менее, для регистрации широкообразователя мне нужен контекст в моем синглтоне. Что такое самоестрельный способ достичь того, что я хочу. Является ли BroadCastreceiver, возможно, не соответствующий объект?
2) Кроме того, какие проблемы я смотрю с помощью Singleton? Я предполагаю, что Android, возможно, вернет эту память в любой момент времени (что, очевидно, было бы плохо); Так как я могу это помешать этому? Будет проходить в контексте приложения и хранить его в переменную участника Thtwart это?
Документация Android заявляет: «Но жизненный цикл статического не очень хорошо под вашим контролем; так что соблюдать модель жизненного цикла, класс Application должен инициировать и оторвать эти статические объекты в OnCreate () и Onterminate ) Методы применения класса ", но я не совсем уверен, как это достичь.
Решение
Тем не менее, для регистрации широкообразователя мне нужен контекст в моем синглтоне. Что такое самоестрельный способ достичь того, что я хочу. Является ли VerveCastreceiver, возможно, не подходящий> объект?
«Slickest Way» - не делать то, что вы делаете. Пожалуйста, зарегистрируйте только BroadcastReceiver
из Activity
, Service
, или может быть ан Application
. Отказ Ты должен нерегистрировать это BroadcastReceiver
когда Activity
, Service
, или Application
разрушен.
Я предполагаю, что Android, возможно, вернет эту память в любой момент времени (что, очевидно, было бы плохо); Так как я могу это помешать этому?
Вы не делаете. Android оставляет за собой право прекратить ваш процесс в любое время (например, чтобы восстановить память). Убийцы задач на Android 2.1 и предыдущие прекратит ваш процесс в любое время. Как только все компоненты вашего приложения будут разрушены, Android может в любое время перерабатывать свой процесс, очистив вашу кучу одновременно. И так далее.
Только положите вещи в память, которую вы не против потерять.
Лучше всего подумать о вашем «приложении» в качестве корзины слабо связанных компонентов, а не как монолитного объекта.
Будет проходить в контексте приложения и хранить его в переменную участника Thtwart это?
Нет.
Документация Android заявляет: «Но жизненный цикл статического не очень хорошо под вашим контролем; так что соблюдать модель жизненного цикла, класс Application должен инициировать и оторвать эти статические объекты в OnCreate () и Onterminate ) Методы применения класса ", но я не совсем уверен, как это достичь.
Создать подкласс Application
и указать в манифесте, что Android должен использовать его через android:name
атрибут на то <application>
элемент.