Подтвердить что ты не робот

Широковещательный приемник и ResultReceiver в android

В чем разница между BroadcastReceiver и ResultReceiver в андроиде?

4b9b3361

Ответ 1

Результирующий приемник:

Generic interface for receiving a callback result from someone.

Широковещательный приемник:

Base class for code that will receive intents sent by sendBroadcast().

EDIT:

Справочная информация. Все сетевые операции/длительные операции должны выполняться в стороне от основного потока. Два способа сделать это:

  • Задача Async - для простых сетей, таких как say retreive image/do db Обработка
  • Сервис - для сложного многолетнего фонового процесса

Если вам нужно выполнить работу вне основного потока, но только в то время, когда пользователь взаимодействует с вашим приложением, вам, вероятно, следует вместо этого создать новый поток, а не службу. Например, если вы хотите воспроизвести какую-либо музыку, но только во время работы, вы можете создать Async Thread. Но если вы хотите, чтобы процесс продолжался даже после выхода пользователя из приложения (скажем, загрузки), используйте службу

Предположим, вы выбрали 2. Теперь

  • Ваше действие отправляет веб-запрос на ваш сервис
  • Ваша служба выполняет это, используя команду DefaultHttpClient
  • Отправляет данные в вашу активность.

    Третий этап получения данных здесь может быть выполнен двумя способами.

1.) Широковещательный приемник. Несколько приемников могут получать ваши данные. Используется, если вы хотите отправлять данные/уведомления в приложениях (скажем, вы также взаимодействуете с fb и twitter, несколькими приемниками для вашего веб-трансляции), всякий раз, когда вы отправляете широковещательную рассылку своей системы.

2.) Приемник результатов: ваше приложение является единственным получателем данных. Это интерфейс, который вы реализуете, и передаете его в службу намерения через putExtra. Затем IntentService извлечет этот объект и вызвать функцию receiver.send для отправки чего-либо (в комплекте) в вызывающей деятельности. Получатель получателя предпочтения по вещательным приемникам, если все ваше сообщение внутри вашего приложения

ИЗМЕНИТЬ: Я должен также упомянуть об этом предостережении

Внимание. Служба работает в основном потоке своего хостинга. служба не создает свой собственный поток и не запускается в отдельном (если вы не указали иначе). Это означает, что если ваш служба будет выполнять любую интенсивную работу ЦП или блокировать операции (например, воспроизведение MP3 или создание сети), вы должны создать новый поток в рамках службы для выполнения этой работы. Используя отдельный поток, вы уменьшит риск ошибок, связанных с выражением, не отвечающим (ANR) и основной поток приложения может оставаться посвященным взаимодействию с пользователем с вашей деятельностью.

Ответ 2

A BroadcastReceiver - это приемник, получающий широковещательные передачи. Они отправляются кем-то в намерении, что их может принимать много приемников (например, радиопередачи).

С другой стороны, ResultReceiver предназначен для получения результата обратного вызова от кого-то. Таким образом, это можно сравнить с рацией, где вы звоните кому-то, а затем получите ответ (результат) от того, кого вы вызвали.

Ответ 3

Эти два класса полностью разные. Это на самом деле та же разница, что и между трансляцией и результатом.

  • Что это такое? Простыми словами это какое-то сообщение, которое видимо для всей системы, и оно может потребляться каждой частью системы (которая знает контракт), она не была вызвана smb reuest;
  • Что такое результат? Это то, что мы ожидаем получить от другой части системы. Обычно для получения результата обычно используется только один приемник, и обычно получатель запрашивает обработку для получения результата (ощущайте разницу - для трансляции никто не должен делать "запрос", чтобы он появился);

Это было объяснение с логической точки зрения. С точки зрения кода, если вы будете сравнивать BroadcastReceiver и ResultReceiver, вы можете наблюдать огромную разницу. В принципе оба класса построены поверх IPC, но BroadcastReceiver намного сложнее из-за его различной природы (которую я попытался объяснить в первой части).

Ответ 4

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

Широковещательный приемник - это компонент, который отвечает на общедоступные широковещательные сообщения. Например, широковещательная передача, объявляющая, что экран выключен, батарея разряжена или снимок сделан. Приложения также могут инициировать трансляции, например, чтобы другие приложения знали, что некоторые данные были загружены на устройство и доступны для них. Хотя широковещательные приемники не отображают пользовательский интерфейс, они могут создавать уведомление о состоянии, чтобы предупредить пользователя о событии вещания. Тем не менее, широковещательный приемник является всего лишь "шлюзом" для других компонентов и предназначен для выполнения минимально необходимого объема работы. Например, он может инициировать службу для выполнения некоторой работы, основанной на событии.

Получатель результатов

Если ваша служба будет частью вашего приложения, вы делаете ее более сложной, чем она должна быть. Поскольку у вас есть простой пример получения некоторых данных из Restful Web Service, вы должны изучить ResultReceiver и IntentService.

Этот шаблон Service + ResultReceiver работает путем запуска или привязки к службе с помощью startService(), когда вы хотите выполнить какое-либо действие. Вы можете указать операцию для выполнения и передачи в свой ResultReceiver (активность) через дополнительные функции в намерении.