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