Почему я должен использовать службу android вместо java-потока

Я запутался в сервисах android и java-потоке.

Пожалуйста, помогите мне понять, в каком сценарии я должен их использовать.

По моему пониманию

Служба работает в фоновом режиме, так что делайте поток.

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

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

Solutions Collecting From Web of "Почему я должен использовать службу android вместо java-потока"

Позвольте мне привести аналогию.

Деятельность и обслуживание – это проекты.

Деятельность подобна внешним проектам. Это то, что видят клиенты (пользователи).

Услуги похожи на внутренние проекты. Может быть несколько внутренних проектов для одного внешнего проекта или вообще нет.

Вы можете «приостановить» внешний проект, но внутренний проект, который его поддерживает, может продолжаться.

Главная тема – как босс в компании

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

Потоки похожи на сотрудников в компании.

Чем больше у вас есть, тем больше вещей вы можете сделать одновременно, если у вас достаточно оборудования (скорость процессора) для всех них.

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

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

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

Таким образом, когда вы запускаете Сервис, вы говорите системе что-то вроде: «Привет. Я занимаюсь здесь бизнесом, не убивайте меня, пока я не закончу, пожалуйста». И Android обращают внимание на ваш запрос.

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

Услуга предназначена для использования в неглавных частях программы.

В основном: служба – это нечто более независимое, чем поток. Сервис – это нечто более продолжительное, чем нить. Сервис – это нечто более сложное, чем поток.

BTW, потоки не работают только в фоновом режиме. То, что работает на переднем плане, тоже поток.

Услуги более похожи на беззаботную деятельность.

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

http://developer.android.com/reference/android/app/Service.html#WhatIsAService

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

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

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

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

Согласно Руководству разработчика Android ( http://developer.android.com/guide/components/services.html#Basics ):

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

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

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

Service Android не запускается в отдельном процессе (по умолчанию) и даже не запускается в отдельном потоке! Он работает в основном потоке (потоке пользовательского интерфейса) приложения, поэтому, если вы хотите сделать что-то трудоемкое задание в Service запустите отдельный поток самостоятельно или используйте IntentService .