В чем разница между Service, Async Task & Thread. Если я не ошибаюсь, все они используются, чтобы делать некоторые вещи в фоновом режиме. Итак, как решить, что использовать и когда?
android
android-asynctask
android-service
java-threads
SpunkerBaba
источник
источник
Ответы:
Возможно, вы уже прочитали описание документации о них, я не буду повторять их, вместо этого я постараюсь дать ответ своими словами, надеюсь, они вам помогут.
Сервис похож на активность, но не имеет пользовательского интерфейса. Возможно, если вы захотите получить погоду, например, вы не создадите для нее пустое действие, для этого вы будете использовать Сервис.
Нить - это Нить, вероятно, вы уже знаете это из другой части. Вы должны знать, что вы не можете обновить пользовательский интерфейс из потока. Для этого вам нужно использовать обработчик, но читайте дальше.
AsyncTask - это интеллектуальная нить, которую рекомендуется использовать. Интеллектуальный, поскольку он может помочь с его методами, и есть три метода, которые работают в потоке пользовательского интерфейса, что хорошо для обновления компонентов пользовательского интерфейса.
Я часто пользуюсь Сервисами, AsyncTasks. Меньше или меньше, так как я могу сделать почти все с AsyncTask.
источник
Это самый простой ответ на ваш вопрос
Нить
является единицей выполнения, которая запускается «параллельно» основному потоку, это важный момент, вы не можете обновить компонент пользовательского интерфейса из любого потока здесь, кроме основного потока.
AsyncTask
это специальный поток, который предоставляет вспомогательные методы для обновления пользовательского интерфейса, поэтому в основном вы можете обновить пользовательский интерфейс, даже если AsyncTask будет работать в фоновом потоке. Обработка межпроцессного взаимодействия не требуется делать явно.
обслуживание
решить вышеуказанную проблему, потому что он работает отдельно от вызывающего его действия, поэтому он может продолжать работать даже после уничтожения действия, он запускается в главном потоке (остерегаясь ANR), используя фоновый сервис (расширяйте IntentService, он автоматически создает рабочий поток для тебя) . Сервис похож на деятельность без UI , хорош для долгой задачи
источник
Немного больше информации, которую я хотел бы, чтобы кто-то сказал мне несколько дней назад:
Мой вариант использования выглядит следующим образом: у меня есть один поток в глобальном пространстве, который подключен к серверу, и активность, которая показывает результаты. Когда пользователь нажимает кнопку «Домой», действие переходит в фоновый режим и запускается новая служба. Затем этот сервис считывает результаты из потока и при необходимости отображает информацию в области уведомлений. Я не беспокоюсь о том, что ОС разрушает мою активность, потому что я знаю, что пока служба работает, она не уничтожит поток.
источник
Короче говоря, служба для
time consuming tasks
, AsyncTask дляshort-lived tasks
, резьбы являетсяstandard java construction
для потоков.источник
С точки зрения разработчика:
Поток : используется для выполнения набора кодов параллельно основному потоку. Но вы не можете обрабатывать пользовательский интерфейс внутри потока. Для этого вам нужно использовать
Handler
. Hadler работает как поток, но может также обрабатывать пользовательский интерфейс.ASyncTask : Используется для обработки тех задач, которые вы не можете выполнить для работы в главном потоке. Например, HTTP-запрос - это очень тяжелая работа, которую нельзя обработать в основном потоке, поэтому вы обрабатываете HTTP-запрос в разделе
ASyncTask
Он работает параллельно с вашим основным потоком в асинхронном режиме в фоновом режиме. У него есть несколько методов обратного вызова, которые вызываются в соответствующих им потоках. События.Сервис : это фоновый процесс. Он используется, когда вам нужно выполнить некоторую обработку, которая не имеет никакого пользовательского интерфейса, связанного с ним.
источник
Service
не обязательно работать в фоновом режиме, если вы не используетеIntentService
. Если вы запустили стандартService
из UiThread, он будет работать в UiThread.Service
по умолчанию не будет запускаться в другом процессе, но в процессе приложения с другими компонентами. Проще сказать, что онService
будет работать на фоне потока, внутри которого он живет.служба похожа на задачу, требующую много времени, но асинхронная задача позволяет нам выполнять длинные / фоновые операции и показывать свой результат в потоке пользовательского интерфейса, не манипулируя потоками.
источник