Каковы преимущества/недостатки при размещении длинного кода сетевого доступа в потоке в активности или потоке в службе? Как это повлияет на приложение? Я пишу потоковый аудиоплеер, и из того, что я читал до сих пор, ввод кода в службу по-прежнему будет блокировать приложение, так что нужен новый поток, кто-нибудь знает, имеет ли смысл вкладывать этот фрагмент кода в службе.
Потоки приложений vs Сервисные потоки
Ответ 1
Да, операция блокировки в Сервисе по-прежнему будет блокировать приложение. Несмотря на первые появления, службы не просто выполняют задачи в фоновом режиме. Они предназначены для выполнения задач с жизненным циклом, который не зависит от жизненного цикла Activity (IE, они могут продолжаться после закрытия Activity).
Служба, которая начинается, когда действие начинается и заканчивается, когда действие заканчивается, бесполезно.
В вашем случае, когда вы передаете аудио, вы можете передавать аудио даже после того, как пользователь закрывает действие, и в этом случае вы должны использовать Сервис, но вам все равно потребуется поток (или AsyncTask) для блокировки задач.
Ответ 2
По моему опыту (разработка Android на более чем 1 год) нет никакой разницы между запуском нового потока в службе или в активности. Попытайтесь не ссылаться на Activity в новом потоке - используйте контекст приложения.
Кроме того, жизненный цикл службы вообще не помог, поскольку некоторые методы не могут быть вызваны: (
Единственное различие может заключаться в том, что служба может быть уничтожена без полного уничтожения приложения - таким образом потенциально уничтожает новые потоки. Почему потенциально? потому что с практической стороны этого не происходит. Приложение ВСЕГДА убивается, не убивая службу до этого, что означает: механизм локальной службы бесполезен!!!
Удаленная служба - это другое обсуждение - я имел в виду только "где я должен запускать новый поток?".
Удачи!!!