Фон
В Android есть 2 возможных способа прослушивания системных событий через BroadcastReceivers:
- статически, через манифест
- программно, используя код.
Так как некоторые проекты содержат множество видов деятельности, сервисов и "менеджеров", может быть полезно иметь один BroadcastReceiver, который будет уведомлять всех своих слушателей о том, что произошло, вместо того, чтобы иметь несколько BroadcastReceivers (и их обработки кода).
Примером такого BroadcastReceiver является тот, который слушает изменения связи:
@Override
public void onCreate() {
super.onCreate();
...
registerReceiver(new ConnectivityChangedBroadcastReceiver(), new IntentFilter(
ConnectivityManager.CONNECTIVITY_ACTION));
...
}
Вопрос
Цель состоит в том, чтобы прослушивать события, пока приложение "живое" (через службы и/или действия).
Использование манифеста пропустит эту цель, так как оно пробудит приложение каждый раз, когда произойдет событие, даже если приложение не нуждается в нем.
Дело в том, что отмена регистрации не происходит, и, возможно, это приводит к тому, что ОС обрабатывает приложение по-другому из-за этого.
Имеет ли вызов "registerReceiver" в классе, который выходит из приложения, является хорошей известной практикой?
Есть ли у него какие-либо побочные эффекты и вещи, которые нужно знать при использовании?
Есть ли альтернатива этому?
Я просто хочу быть уверенным, что он считается безопасным для использования.