Разница между Службой, асинхронной задачей и потоком?
в чем разница между Службой, асинхронной задачей и потоком. Если я не ошибаюсь, все они используются для выполнения некоторых вещей в фоновом режиме. Итак, как решить, что использовать и когда?
6 ответов
Вероятно, вы уже прочитали описание документации о них, я не буду повторять их, вместо этого я попытаюсь дать ответ своими словами, Надеюсь, они помогут вам.
сервис похож на активность, но не имеет интерфейса. Вероятно, если вы хотите получить погоду, например, вы не создадите для нее пустую активность, для этого вы будете использовать сервис.
нить-это нить, вероятно, вы уже знаете ее из другой части. Тебе нужно чтобы знать, что вы не можете обновить UI из потока. Для этого Вам нужно использовать обработчик, но читайте дальше.
AsyncTask-это интеллектуальный поток, который рекомендуется использовать. Интеллектуальный, как это может помочь с его методами, и есть три метода, которые работают в потоке пользовательского интерфейса, что хорошо для обновления компонентов пользовательского интерфейса.
Я часто использую службы, AsyncTasks. Нить меньше или вообще нет, так как я могу сделать почти все с AsyncTask.
Это самый простой ответ на свой вопрос
нить
- это единица выполнения, которая выполняется "параллельно" основному потоку является важным моментом, вы не можете обновить компонент пользовательского интерфейса из основного потока здесь.
AsyncTask
для короткой задачи, потому что привязан к активности хоста например, если вы создаете AsyncTask, который будет извлекать данные с сервера (не делайте Это) когда вы поворачиваете телефон и действие воссоздается снова, AsyncTask будет воссоздан.
сервис
решите вышеуказанную проблему, потому что она живет отдельно от действия, которое вызывает его, поэтому она может продолжать работать, даже когда действие уничтожено,Он запускается в основном потоке (остерегайтесь ANR) используйте фоновую службу (расширьте IntentService, он автоматически создаст рабочий поток для вас). сервис как активность без UI, хорошо для долгой задачи
немного больше информации я хотел бы, чтобы кто-то сказал мне несколько дней назад:
- вы можете совместно использовать глобальные переменные, такие как потоки, между действиями и службами.
- код приложение вместе со всеми его глобальными переменными не будут уничтожены, пока есть активность или Служба все еще присутствует.
- Если у вас есть экземпляр службы в вашем приложении и ОС нужны ресурсы, он сначала убивает свою деятельность, но пока существует служба, ОС не уничтожит ваше приложение Вместе с его глобальными переменными.
мой вариант использования таков: у меня есть один поток в глобальном пространстве, который подключен к серверу, и действие, которое показывает результаты. Когда пользователь нажимает кнопку "Домой", действие переходит в фоновый режим и запускается новая служба. Затем эта служба считывает результаты из потока и при необходимости отображает информацию в области уведомлений. Я не беспокоюсь о разрушении ОС моя активность, потому что я знаю, что пока служба работает, она уничтожит поток.
короче, сервис на time consuming tasks
, AsyncTask на short-lived tasks
, нить это standard java construction
для потоков.
С точки зрения разработчика:
нить: используется для выполнения набора кодов параллельно основному потоку. Но вы не можете обрабатывать пользовательский интерфейс внутри потока. Для этого вам нужно использовать Handler
. Hadler работает как поток, но также может обрабатывать пользовательский интерфейс.
ASyncTask: используется для обработки тех задач, которые вы не можете заставить работать в основном потоке. Например, HTTP-запрос-это очень тяжелая работа, которую нельзя выполнить вручную основной поток, поэтому вы обрабатываете HTTP-запрос в ASyncTask
он работает параллельно с вашим основным потоком асинхронно в фоновом режиме.Он имеет несколько методов обратного вызова, которые вызываются в соответствующих событиях.
сервис: это фоновый процесс. Он используется, когда вам нужно выполнить некоторую обработку, которая не имеет связанного с ней пользовательского интерфейса.
служба похожа на длительную трудоемкую задачу, но асинхронная задача позволяет выполнять длинные / фоновые операции и показывать ее результат в потоке пользовательского интерфейса без необходимости манипулировать потоками.