Разница между Службой, асинхронной задачей и потоком?



в чем разница между Службой, асинхронной задачей и потоком. Если я не ошибаюсь, все они используются для выполнения некоторых вещей в фоновом режиме. Итак, как решить, что использовать и когда?

636   6  

6 ответов:

Вероятно, вы уже читали описание документации о них, я не буду повторять их, вместо этого я постараюсь дать ответ своими словами, Надеюсь, что они помогут вам.

  • сервис как деятельность, но не имеет интерфейса. Вероятно, если вы хотите получить погоду, например, вы не создадите для нее пустую активность, для этого вы будете использовать сервис.

  • нить-это нить, возможно вы уже знаете ее из другой части. Тебе нужно чтобы знать, что вы не можете обновить пользовательский интерфейс из потока. Вам нужно использовать обработчик для этого, но читать дальше.

  • AsyncTask-это интеллектуальный поток, который рекомендуется использовать. Интеллектуальный, поскольку он может помочь с его методами, и есть три метода, которые работают в потоке пользовательского интерфейса, что хорошо для обновления компонентов пользовательского интерфейса.

Я использую услуги, AsyncTasks часто. Нить меньше, или вообще нет, так как я могу сделать почти все с AsyncTask.

Это самый простой ответ на свой вопрос

Thread

- это единица выполнения, которая выполняется "параллельно" основному потоку это важный момент, Вы не можете обновить один компонент пользовательского интерфейса главной теме.

AsyncTask

для короткой задачи, потому что привязан к активности хоста например, если вы создаете AsyncTask, который будет извлекать данные с сервера (не делайте Это) когда вы поворачиваете телефон, и действие воссоздается снова, AsyncTask будет воссоздан.

сервис

решите вышеуказанную проблему, потому что он живет отдельно от действия, которое вызывает его, поэтому он может продолжать работать даже при уничтожении действия,Он запускается в основном потоке(остерегайтесь ANR) используйте фоновую службу (расширьте IntentService он автоматически создает рабочий поток для вас). сервис как деятельность без пользовательского интерфейса, это хорошо для долгой задачи

немного больше информации я хотел бы, чтобы кто-то сказал мне несколько дней назад:

  • вы можете совместно использовать глобальные переменные - такие как потоки-между действиями и службами.
  • код приложение вместе со всеми его глобальными переменными не будут уничтожены до тех пор, пока есть активность или Служба все еще присутствует.
  • Если у вас есть экземпляр службы в вашем приложении и ОС нужны ресурсы, он сначала убивает свою деятельность, но пока существует служба, ОС не уничтожит ваше приложение Вместе с его глобальными переменными.

мой вариант использования выглядит так: у меня есть один поток в глобальном пространстве, который подключен к серверу и активности, которая показывает результаты. Когда пользователь нажимает кнопку home, действие переходит в фоновый режим и запускается новая служба. Затем эта служба считывает результаты из потока и при необходимости отображает информацию в области уведомлений. Я не беспокоюсь о разрушении ОС моя деятельность, потому что я знаю, что пока служба работает, она не уничтожит поток.

короче, сервис на time consuming tasks,AsyncTask на short-lived tasks, Thread это standard java construction для потоков.

С точки зрения разработчика:

Thread: используется для выполнения набора кодов параллельно основному потоку. Но вы не можете обрабатывать пользовательский интерфейс внутри потока. Для этого вам нужно использовать Handler. Hadler работает как поток, но также может обрабатывать пользовательский интерфейс.

ASyncTask: используется для обработки тех задач, которые вы не можете заставить работать в основном потоке. Например, HTTP-запрос-это очень тяжелая работа, которая не может быть обработана на основной поток, поэтому вы обрабатываете HTTP-запрос в ASyncTask он работает параллельно с вашим основным потоком асинхронно в background.It имеет несколько методов обратного вызова, которые вызываются на соответствующие события.

сервис: это фоновый процесс. Он используется, когда вам нужно сделать некоторую обработку, которая не имеет никакого пользовательского интерфейса, связанного с ним.

служба похожа на длительную трудоемкую задачу, но асинхронная задача позволяет нам выполнять длинные / фоновые операции и показывать свой результат в потоке пользовательского интерфейса без необходимости манипулировать потоками.

Comments

    Ничего не найдено.