Однако для регистрации BroadcastReceiver мне нужен контекст в моем синглтоне.Какой самый приятный способ добиться того, чего я хочу.Возможно, BroadcastReceiver не подходит> объекту?
"Самый ловкий способ" - не делать то, что вы делаете.Пожалуйста, зарегистрируйте BroadcastReceiver
из Activity
, Service
или , возможно и Application
.Вы должны отменить регистрацию этого BroadcastReceiver
, когда Activity
, Service
или Application
будут уничтожены.
Я предполагаю, что Android может восстановить эту память в любой моментданное время (что, очевидно, было бы плохо);так как я могу предотвратить это?
Вы не делаете.Android оставляет за собой право прекратить ваш процесс в любое время (например, вернуть память).Убийцы задач на Android 2.1 и более ранних версиях прервут ваш процесс в любое время.Как только все компоненты вашего приложения будут уничтожены, Android может перезапустить ваш процесс в любое время, одновременно очистив вашу кучу.И т. Д.
Храните в памяти только те вещи, которые вы не против потерять.
Лучше всего рассматривать ваше «приложение» как корзину слабо связанных компонентов, а не какмонолитная сущность.
Передача в контексте приложения и сохранение его в переменной-члене помешает этому?
Нет.
Документация Android гласит: «Но жизненный цикл статики не находится под вашим контролем, поэтому для соблюдения модели жизненного цикла класс приложения должен инициировать и разрушать эти статические объекты в onCreate () и onTerminate ().методы класса приложения ", но я не совсем уверен, как этого добиться.
Создайте подкласс Application
и укажите в манифесте, что Android должен его использовать, через android:name
атрибут элемента <application>
.