Основное различие между Manifest и Programmatic регистрации BroadcastReceiver
Я пытаюсь понять основные различия между регистрацией BroadcastReceiver в манифесте и его программным программированием...
Мое понимание в основном выглядит следующим образом (хотелось бы, чтобы кто-то исправлял мои баллы, если мне что-то не хватает).
спасибо
Ответы
Ответ 1
У вас это в основном правильно.
Обратите внимание, что объект-зарегистрированный приемник используется только один раз. Новый экземпляр вашего BroadcastReceiver
создается для каждой трансляции. Основное использование регистраторов, зарегистрированных в манифестах, предназначено для трансляций, которые могут продолжаться, пока ваш код не находится в памяти (например, BOOT_COMPLETED
, ваши запланированные тревоги через AlarmManager
).
Ответ 2
Когда использовать этот метод для регистрации
Какой метод использовать для регистрации вашего BroadcastReceiver зависит от того, что ваше приложение делает с системным событием. Я думаю, что есть две причины, по которым ваше приложение хочет узнать об общесистемных событиях:
Примеры для первой категории - это приложения, которые должны работать сразу после загрузки устройства или запускать какую-либо работу при установке приложения. Battery Widget Pro или App2SD - хорошие примеры для таких приложений. Для этого типа вы должны зарегистрировать BroadcastReceiver в файле манифеста.
Примерами второй категории являются события, которые сигнализируют об изменении обстоятельств, на которые может положиться ваше приложение. Скажите, что ваше приложение зависит от установленного соединения Bluetooth. Вы должны реагировать на изменение состояния - но только тогда, когда ваше приложение активно. В этом случае нет необходимости в статически зарегистрированном широковещательном приемнике. Динамически зарегистрированный был бы более разумным.
Есть также несколько событий, для которых вам даже не разрешено статически регистрироваться. Примером этого является событие Intent.ACTION_TIME_TICK, которое транслируется каждую минуту. Это мудрое решение, потому что статический приемник излишне разряжал батарею.
Ответ 3
Ваше понимание правильное по моему.
Еще одна важная (и неявная) разница заключается в том, что некоторые специфические системные намерения будут запускать ваш приемник только в том случае, если он зарегистрирован программно. Приемники, определенные только в манифеста, не будут вызываться.
Примеры: ACTION_SCREEN_ON, ACTION_SCREEN_OFF, ACTION_BATTERY_CHANGED, ACTION_HEADSET_PLUG
Я бы рекомендовал этот текст, в котором упоминаются различные подробности о намерениях и приемниках.