В чем разница между услугой и приемником вещания?


14

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


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

Ответы:


27

Приложения Android имеют три вида компонентов. В общем, пользователям не нужно знать о них: они позволяют авторам приложений программировать в своих приложениях определенное поведение. Но если вы внимательно следите за поведением своих приложений, например, с помощью диспетчера задач, или если вы автоматизируете такие вещи с помощью приложения, такого как Tasker, полезно понять, как они сочетаются друг с другом в системе.

Деятельность является наиболее известным типом компонента: это окно вы можете увидеть: либо полный экран или диалог размера. Действие выполняется только тогда, когда оно отображается на экране. После того как вы покинете действие, Android сохранит это приложение в памяти, готовое к повторному запуску, но действие не запустится, то есть не будет использовать батарею или сеть. Приложение запускает действие, используя намерение . Намерение может явно указать, какое действие следует запустить, или оно может указать действие, которое нужно выполнить (например, открыть определенный файл). Если более чем одно действие может «обработать» намерение, вы увидите диалоговое окно с просьбой выбрать одно.

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

Приложения могут использовать службы для выполнения длительных процессов в фоновом режиме, таких как загрузка файлов с сервера, проверка электронной почты или проверка вашего местоположения. Хотя службы не отображаются или не взаимодействуют с вами напрямую, они все равно отображаются в списке «Запущенные приложения». В приложении « Настройки» выберите « Приложения» или « Диспетчер приложений» , а затем « Запуск» . Вы можете остановить службу таким образом, но обычно это не требуется. Поскольку службы не видны напрямую, Android считает их менее важными, чем действия, поэтому они будут убиты первыми, когда вашему телефону потребуется больше памяти.

Вещательные приемники являются третьим видом компонента. Как и сервисы, они существуют только в фоновом режиме и не взаимодействуют с вами напрямую. Но в отличие от сервисов, они не могут работать или выполнять длинные задачи: они существуют, чтобы реагировать на события. И в отличие от действий и услуг, более одного широковещательного приемника можно запустить за один раз.

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

Примером совместной работы всех трех компонентов является загрузка приложения из Google Play. Во-первых, действие Google Play предоставляет визуальный интерфейс для выбора контента для загрузки. Список приложений может быть одним видом деятельности; Нажатие на кнопку «Установить» запускает другое действие, чтобы показать диалог подтверждения или оплаты. Когда вы подтвердите, диалоговое действие запускает службу. Служба продолжит загрузку содержимого, даже если действие завершено и больше не работает.

Но, возможно, телефон теряет подключение к Интернету во время загрузки нового приложения. Если это произойдет, служба загрузки Google Play зарегистрирует широковещательный приемник с фильтром намерений, чтобы сообщить, что он заинтересован в изменениях сетевого подключения, а затем служба сама прекратит работу. Когда телефон подключается к Интернету, система передает событие. Android запустит широковещательный приемник, зарегистрированный сервисом Google Play, наряду с любым другим широковещательным приемником, ожидающим это событие. В этом случае приемник вещания снова запустит службу загрузки. Служба будет создавать уведомления по мере загрузки, а когда она завершится, она отправит свою собственную рассылку, чтобы сообщить другим приложениям об установке нового пакета, а затем остановится сама. В свою очередь, это запустит широковещательные приемники из других приложений,

В итоге:-

  • Деятельность представляет собой окно на экране; служба выполняет, возможно, длительную фоновую задачу; приемник вещания работает в течение короткого времени, чтобы обработать событие.
  • Все три начинают использовать намерения, но используют другой механизм. Запускающее приложение должно четко указать, какой тип компонента запускать (вызывая разные методы в каждом случае).
  • Когда приложение запускает действие, используя намерение, оно запускает только одно действие (возможно, отображающее диалоговое окно «Завершить действие, используя…», чтобы вы могли выбрать, какое), и то же самое относится и к услугам, но трансляция намерения может начать несколько трансляций. приемники, возможно, из разных приложений.
  • Как пользователь, вы взаимодействуете с деятельностью напрямую; вы не взаимодействуете со службами, но они могут замедлить работу телефона и потреблять ресурсы; вы не взаимодействуете с вещательными приемниками, и, поскольку они недолговечны, вам не нужно беспокоиться об управлении ими.

Очень полезный ответ. Я просто хочу подтвердить кое-что: что происходит с приложениями, которые отключены пользователями? Запускает ли Android когда-либо свой радиовещательный приемник для целей, для которых они зарегистрированы? Или эти отключенные приложения могут работать в фоновом режиме? Почему кнопка Force-Stop не отображается серым цветом для отключенных приложений даже после перезагрузки? Мне ясно, что их деятельность не может быть начата.
Повелитель огня

@Firelord Если у вас есть новый вопрос, вы должны опубликовать его как новый вопрос. Комментарии не дают подробных ответов и не делают ваш вопрос доступным для других посетителей.
Дэн Халм

Отличный пост, но на самом деле, есть четыре компонента. Поставщики контента отсутствуют.
Александр Мартин
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.