Зачем использовать Сервис, если он работает в том же потоке в Android

Я проходил через Bound Service на сайте разработчика Android. Я думал, что понял сервис достаточно, но я просто нашел другой способ подключения сервиса через использование класса Messenger особенно для локального сервиса. Там я запутался. Может быть, я неправильно понял концепцию.

Вот мое понимание Android Service. Вы создаете сервис, когда

  1. Вы хотите сделать отдельные работы в фоновом режиме.
  2. Вы хотите сделать это отдельным процессом.
  3. Вы хотите, чтобы он работал в жизненном цикле, независимом от компонента, который его запустил.

Путаница - это первый элемент в списке, определение фона. Разве фон не является потоком или процессом? Я никогда не думал, что он может работать в главном потоке.

Вот предостережение обслуживания на страницах разработчиков о.

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

Вопросы

  1. Почему выбирают использовать сервис, если сервисная функция все равно будет работать в главном потоке?
  2. Нужно ли нам писать сервис только для блокировки ANR, даже если трудоемкая работа выполняется в главном потоке? Предположим, услуга только для моего приложения.
  3. Существуют ли какие-либо практические случаи или причины использовать службу как частную и работающую в одном потоке?

Ответы

Ответ 1

Основной поток приложения не всегда является потоком пользовательского интерфейса. Например, когда Activity остановлен, вызывается onStop(), следовательно, поток пользовательского интерфейса отбирается из этого Activity и перемещается в другое действие в том же или другом приложении. Однако это не означает, что приложение больше не активно, оно может продолжать работать в фоновом режиме, пока оно не будет закрыто ни ОС, ни пользователем. Тогда, кто продолжает работать в фоновом режиме? Это основной поток, а не поток пользовательского интерфейса.

Что такое услуги

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

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

Зачем пользоваться сервисом

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

Используйте IntentService, если вы не хотите возиться с управлением потоками самостоятельно. В противном случае используйте AsyncTasks.

Пожалуйста, прочитайте эту превосходную статью, чтобы понять более подробно, а также прочитать этот ответ.

Ответ 2

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

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

например, службы в отдельном потоке - IntentService