Когда отменять регистрацию приемника вещания, зарегистрированного в onCreate?

В Android я зарегистрировал BroadcastReceiver в своем onCreate(). Где я должен отменить регистрацию, чтобы у меня не было просочившихся приемников?

Ответ 1

http://developer.android.com/reference/android/content/BroadcastReceiver.html

"Вы можете динамически зарегистрировать экземпляр этого класса с помощью Context.registerReceiver() или статически опубликовать реализацию через тег в вашем AndroidManifest.xml. Примечание. Если вы регистрируете получателя в своей реализации Activity.onResume(), вы можете должен отменить регистрацию в Activity.onPause(). (Вы не будете получать намерения при приостановке, и это сократит ненужные системные издержки). Не отмените регистрацию в Activity.onSaveInstanceState()."

:) SDK - ваш лучший друг. Я бы сказал, сделайте то, что он говорит в SDK, если вам не понадобится приемник при паузе, но будьте осторожны. Вам нужно динамически регистрировать приемник или добавить его в AndroidManifest.xml лучше? Если вы поместите приемник в манифест, вам не нужно будет беспокоиться о его регистрации/регистрации.

Ответ 2

До сих пор у меня было 2 случая регистрации динамического вещательного приемника:

  • Вы хотите, чтобы радиовещательный приемник регистрировался только тогда, когда активность активизировалась, и я имею в виду, что пользователь фактически видит текущий макет действия.

- > Затем вещательный приемник должен быть зарегистрирован в onResume и незарегистрирован в onPause. Нормальный случай, указанный в официальной документации (http://developer.android.com/reference/android/content/BroadcastReceiver.html).

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

- > Затем приемник вещания должен быть зарегистрирован в onCreate и незарегистрирован в onDestroy (подтверждено Как отменить регистрацию BroadcastReceiver). Если нет, то когда приложение будет приостановлено, метод onReceive() не будет вызываться.
Будьте осторожны, однако, onDestroy не гарантируется называться (точка поднята в Android - когда регистрировать/отменять регистрацию широковещательных приемников, созданных в рамках действия?), поэтому вам придется сделать уверен, что он называется в какой-то момент (активность завершена), не уверен, что это лучшая практика.

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

Ответ 3

Когда вы повторно используете приемник вещания в методе Create, мне было бы лучше, если вы отмените регистрацию в onDestroy() method.it - ​​это просто метод переопределения, вызываемый, когда когда-либо ваше приложение будет уничтожено.

Ответ 4

Вы должны отменить регистрацию, если вы больше не хотите или не можете получать трансляции.