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

Сервис против темы в Android

Я ищу, какая служба должна использоваться в андроид-аппликации.

Документы говорят

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

Я прочитал эту цепочку Нити приложений vs Служебные нити, в которых одни и те же сервисы предназначены для работы в фоновом режиме.

Но здесь это можно сделать и с помощью Thread. Любая разница между ними и тем, где вы должны их использовать

4b9b3361

Ответ 1

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

Пример. Предположим, вы хотите ежедневно делать резервную копию своих мгновенных сообщений в фоновом режиме, а затем использовать Service.

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

Пример: вы используете Thread в Activity для какой-либо цели, это хорошая практика, чтобы остановить его, когда ваша деятельность уничтожает.

Ответ 2

ОБНОВЛЕНИЕ на основе последней документации:

Android включил в свою документацию, когда вы должны использовать Service vs Thread. Вот что он говорит:

Если вам нужно выполнить работу вне основного потока, но только во время пользователь взаимодействует с вашим приложением, тогда вам следует возможно, вместо этого создайте новый поток, а не сервис. Например, если вы хотите играть музыку, но только когда ваша деятельность работает, вы можете создать поток в onCreate(), запустить его в onStart(), затем остановите его в onStop(). Также рассмотрите возможность использования AsyncTask или HandlerThread, вместо традиционного класса Thread. Увидеть Документы о процессах и потоках для получения дополнительной информации о потоках.

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

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

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

Сервисный подход: музыка все еще может воспроизводиться, даже если вы свернули приложение или экран выключен.

Примечание. Начиная с уровня API 23, вы должны протестировать свое приложение с помощью Doze.

Документация Android - Сервисы

Ответ 3

Это принцип, которому я в основном следую

Использовать тему, когда

  • приложение должно быть видно, когда происходит операция.
  • фоновая операция относительно короткая (менее минуты или двух)
  • активность/экран/приложение тесно связаны с фоновой операцией, пользователь обычно "ждет" завершения этой операции, прежде чем делать что-либо еще в приложении. Использование потока в этих случаях приводит к более чистому, более читабельному и поддерживаемому коду. При этом можно использовать Сервис (или IntentService).

Использовать услугу, когда

  • приложение может быть невидимым при выполнении операции (такие функции, как служба Foreground, могут помочь в прерывании операций)
  • Пользователь не обязан "ждать" завершения операции, чтобы выполнить другие действия в приложении.
  • приложение видно, и операция не зависит от контекста приложения/экрана.

Ответ 4

Ссылка из https://developer.android.com/guide/components/services.html

Служба - это просто компонент, который может работать в фоновом режиме, даже если пользователь не взаимодействует с вашим приложением. Таким образом, вы должны создать сервис, только если это вам нужно.

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

Например, если вы хотите воспроизвести какую-либо музыку, но только во время работы, вы можете создать поток в onCreate(), запустить его в onStart(), а затем остановить его в onStop().

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

Ответ 5

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

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