Приемники широковещательных намерений

 

Как уже говорилось ранее, приемник широковещательных намеренийэто компонент для получения внешних событий и реакции на них. Инициализировать передачи могут другие приложения или службы.

Класс BroadcastReceiver является базовым для класса, в котором должны происходить получение и обработка намерений, посылаемых клиентским приложением с помощью вызова метода sencffiroadcast(). Вы можете или динамически зарегистрировать экземпляр класса BroadcastReceiver с помощью метода Context.registerReceiver(), или статически создать его в элементе <receiver> в файле манифеста приложения.

Есть два основных класса сообщений, которые могут быть получены приемником:

  • нормальные сообщения о намерениях (Normal broadcasts) — посылаемые вызовом метода Context.sencffiroadcast и являющиеся полностью асинхронными. Все получатели сообщения выполняются в неопределенном порядке, часто в одно и то же время. Это более эффективно, но означает, что получатели не могут использовать результат или прервать сообщение;
  • порядковые сообщения о намерениях (Ordered broadcasts), которые посылаются методом Context.sendOrderecffiroadcast(). Эти сообщения посылаются одному получателю за один раз. Поскольку каждое полученное сообщение выполняется по очереди, он может в случае необходимости полностью прервать сообщение, чтобы его не успели передать другим приемникам. Приемниками намерений можно управлять с помощью атрибута android:priority фильтра намерений; приемники намерений, имеющие одинаковый приоритет, будут выполнены в произвольном порядке.

Хотя класс Intent используется для посылки и получения этих широковещательных намерений, сам механизм широковещательных намерений полностью отделен от намерений, используемых, например, чтобы запустить деятельность методом Context. startActivity().

Для объекта BroadcastReceiver нет никаких возможностей видеть или фиксировать намерения, используемые в методе startActivity(). Аналогично, когда вы передали намерение для запуска деятельности через объект BroadcastReceiver, вы не сможете найти или запустить требуемую деятельность. Эти две операции семантически полностью различаются: запуск деятельности через намерение является приоритетной операцией для системы, изменяющей содержимое экрана устройства, с которым в настоящее время взаимодействует пользователь. Передача намерения для системы является фоновой работой, о которой обычно не знает пользователь и которая, соответственно, имеет более низкий приоритет.

Класс BroadcastReceiver (когда он запускается как компонент через элемент манифеста <receiver>) является важной частью полного жизненного цикла приложения.