В чем разница между сервисом, Async Task и Thread. Если я не ошибаюсь, все они используются, чтобы сделать что-то в фоновом режиме. Итак, как решить, что использовать и когда?
Разница между сервисом, Async Task & Thread?
Ответ 1
Возможно, вы уже прочитали описание документации о них, я не буду повторять их, вместо этого я попытаюсь дать ответ своими словами, надеюсь, что они вам помогут.
-
Служба похожа на Activity, но не имеет интерфейса. Вероятно, если вы хотите получить прогноз погоды, например, вы не создадите для него пустую деятельность, для этого вы будете использовать Сервис.
-
A Thread - это Thread, возможно, вы уже знаете его с другой стороны. Вам нужно знать, что вы не можете обновлять пользовательский интерфейс из потока. Для этого вам нужно использовать обработчик, но читать дальше.
-
AsyncTask - это интеллектуальный поток, который рекомендуется использовать. Интеллектуальный, поскольку он может помочь с его методами, и есть три метода, которые запускаются в потоке пользовательского интерфейса, что полезно для обновления компонентов пользовательского интерфейса.
Я часто использую службы, AsyncTasks. Нить меньше, или совсем нет, поскольку я могу делать почти все с помощью AsyncTask.
Ответ 2
Это самый простой ответ на ваш вопрос
Тема
- это единица исполнения, выполняющая "параллельную" основную тему, важно указать, что вы не можете обновить компонент пользовательского интерфейса из основного потока.
AsyncTask
для короткой задачи, потому что она привязана к активности хоста, например, если вы создаете AsyncTask, который собирается вытащить данные с сервера (НЕ ДЕЛАЙТЕ ЭТО) при повороте телефона, и это действие снова воссоздается, AsyncTask воссоздает также
Сервис
решить эту проблему, потому что она живет отдельно от активности, которая вызывает его, поэтому она может продолжать работать, даже когда действие уничтожается, он запускается в основном потоке (остерегайтесь ANR) использовать фоновый сервис (расширение IntedService создает рабочий поток автоматически для вас). Сервис похож на активность без пользовательского интерфейса, хорошо подходит для длительной задачи
Ответ 3
Немного больше информации, которую я хотел бы сказать кому-то несколько дней назад:
- Вы можете совместно использовать глобальные переменные, такие как потоки, между действиями и службами.
- Ваше приложение вместе со всеми его глобальными переменными не будет уничтожено, пока есть активность или служба, все еще присутствующие.
- Если у вас есть экземпляр Сервиса в вашем приложении, а ОС - ресурсы, он сначала убивает ваши действия, но пока есть Служба, ОС не уничтожит ваше приложение вместе с его глобальными переменными.
Мой пример использования такой: у меня есть один поток в глобальном пространстве, который подключен к серверу, и Activity, который показывает результаты. Когда пользователь нажимает кнопку "домой", активность переходит в фоновый режим и запускается новый сервис. Затем эта служба считывает результаты из потока и отображает информацию в области уведомлений, когда это необходимо. Я не беспокоюсь о том, что ОС разрушает мою активность, потому что я знаю, что пока Служба работает, она уничтожит поток.
Ответ 4
Тема
Нить - это параллельная единица исполнения. Он имеет свой собственный стек вызовов. Существует два способа реализации потоков в приложениях.
Один представляет собой новый класс, который расширяет поток и отменяет его метод run(). Другой предоставляет новый экземпляр Thread с объектом Runnable во время его создания. Поток может быть выполнен путем вызова его метода "start". Вы можете установить "Приоритет" потока, вызвав его метод setPriority (int).
Нить может использоваться, если у вас нет влияния в части пользовательского интерфейса. Например, вы вызываете некоторый веб-сервис или загружаете некоторые данные, а после загрузки вы показываете его на экране. Затем вам нужно использовать обработчик с потоком, и это сделает ваше приложение сложным для обработки всех ответов потоков.
Обработчик позволяет отправлять и обрабатывать объекты Message и Runnable, связанные с потоком MessageQueue. Каждый поток имеет каждую очередь сообщений. (Как список дел), и поток будет принимать каждое сообщение и обрабатывать его до тех пор, пока очередь сообщений не будет пуста. Таким образом, когда Handler связывается, он просто передает сообщение потоку вызывающего, и он будет ждать процесса.
Если вы используете Java-потоки, вам необходимо выполнить следующие требования в своем собственном коде:
- Синхронизация с основным потоком, если вы отправляете результаты на пользовательский интерфейс По умолчанию для отмены потока нет нити по умолчанию объединение по умолчанию для обработки изменений конфигурации в Android
AsyncTask
AsyncTask позволяет правильно и легко использовать поток пользовательского интерфейса. Этот класс позволяет выполнять фоновые операции и публиковать результаты в потоке пользовательского интерфейса без необходимости манипулировать потоками и/или обработчиками. Асинхронная задача определяется вычислением, которое выполняется на фоновом потоке и результат которого публикуется в потоке пользовательского интерфейса.
AsyncTask будет проходить следующие 4 этапа:
onPreExecute()
Вызывается в потоке пользовательского интерфейса перед выполнением задачи
doInbackground (Params..)
Вызывается в фоновом потоке сразу после того, как onPreExecute() завершает выполнение.
onProgressUpdate (Прогресс..)
Вызывается в потоке пользовательского интерфейса после вызова publishProgress (Прогресс...).
onPostExecute (Результат)
Вызывается в потоке пользовательского интерфейса после завершения фонового расчета.
Почему вы должны использовать AsyncTask?
Прост в использовании для потока пользовательского интерфейса. (Итак, используйте его, когда поток вызывающего потока является потоком пользовательского интерфейса). Нет необходимости манипулировать обработчиками.
Сервис Служба - это контекст, подобный Activity, но не имеющий графического интерфейса.
Важно: служба не запускается в новом потоке!
Прочитайте Service, а также проверьте Как всегда запускать службу в фон
Ответ 5
Короче говоря, Сервис для time consuming tasks
, AsyncTask для short-lived tasks
, Тема - standard java construction
для потоков. p >
Ответ 6
С точки зрения разработчика:
Тема: используется для выполнения набора кодов параллельно с основным потоком. Но вы не можете обрабатывать пользовательский интерфейс внутри потока. Для этого вам нужно использовать Handler
. Hadler работает как поток, но также может обрабатывать интерфейс.
ASyncTask. Используется для обработки тех задач, которые вы не можете выполнить для основного потока. Например, HTTP-запрос - это очень тяжелая работа, которая не может быть обработана в основном потоке, поэтому вы обрабатываете HTTP-запрос в ASyncTask
. Он работает параллельно с вашим основным потоком асинхронно в фоновом режиме. Он имеет несколько методов обратного вызова, которые вызываются на их соответствующих событиях.
Сервис. Является фоновым процессом. Он используется, когда вам нужно выполнить некоторую обработку, у которой нет соответствующего пользовательского интерфейса.
Ответ 7
служба похожа на задачу, требующую много времени, но задача Async позволяет выполнять длинные/фоновые операции и показывать результат в потоке пользовательского интерфейса без необходимости манипулировать потоками.