Потоки приложений против служебных потоков - PullRequest
27 голосов
/ 14 апреля 2010

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

Ответы [ 2 ]

36 голосов
/ 14 апреля 2010

Да, операция блокировки в Сервисе по-прежнему блокирует приложение. Несмотря на первые появления, Сервисы не просто для запуска задач в фоновом режиме. Они предназначены для запуска задач с жизненным циклом, который не зависит от жизненного цикла действия (IE, они могут продолжаться после закрытия действия).

Служба, которая запускается, когда действие начинается и заканчивается, когда заканчивается действие, бесполезна.

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

2 голосов
/ 22 марта 2012

По моему опыту (от 1 года разработки Android), нет никакой разницы между запуском нового потока в службе или в действии. Старайтесь не сохранять ссылку на Activity в новом потоке - используйте контекст приложения.

Кроме того, жизненный цикл службы вообще не помог, поскольку не гарантируется, что некоторые методы будут вызываться: (

Единственное отличие может заключаться в том, что служба может быть уничтожена без полного уничтожения приложения - таким образом потенциально уничтожает новые потоки. Почему потенциально? потому что с практической стороны этого не происходит. Приложение ВСЕГДА убивается , не убивая службу до этого, что означает: локальный механизм службы бесполезен !!!

Удаленное обслуживание - это другое обсуждение - я имел в виду только «где мне запустить новый поток?».

Удачи !!!

...