Сервис или поток или AsyncTask

Помилуй мои вопросы, так как я все еще очень новичок в программировании, поэтому я не совсем понимаю понятия mainthreads и асинхронных задач, а также сервисы и потоки. Я читаю документацию об услугах для Android, потому что я хочу выполнить некоторые задачи из основного потока. В нем говорится:

Если вам необходимо выполнить работу вне основного потока, но только в то время, когда пользователь взаимодействует с вашим приложением, вам, вероятно, следует вместо этого создать новый поток, а не службу.

1. Они говорят, что «поток» останавливается сразу после того, как вы покидаете приложение (например, кнопка «Домой»)?

Например, если вы хотите воспроизвести какую-либо музыку, но только во время работы, вы можете создать поток в onCreate (), запустить его в onStart (), а затем остановить его в onStop (). Также рассмотрите использование AsyncTask или HandlerThread вместо традиционного класса Thread. Дополнительную информацию о потоках см. В документе Processes and Threading.

2. Если потоки выпекаются на Java, почему у android есть AsyncTasks?

Помните, что если вы используете службу, она по-прежнему работает в основном потоке вашего приложения по умолчанию, поэтому вы должны создать новый поток в службе, если он выполняет интенсивные или блокирующие операции.

3. Это в основном означает, что почти каждая служба, в основном, будет иметь поток, созданный внутри него?

4. Неправильно ли запустить AsyncTask внутри службы?

1. Они говорят, что «поток» останавливается сразу после того, как вы покидаете приложение (например, кнопка «Домой»)?

Thread должна быть уничтожена, когда начался ее поток. Итак, если вы начинаете Thread в Activity то он должен быть уничтожен, когда эта Activity будет уничтожена или передана Service . Например, вы можете начинать музыку в Thread и обновлять песни там, но если вы хотите, чтобы она продолжала играть, когда действие было уничтожено, ее следует перенести в Service

2. Если потоки выпекаются на Java, почему у android есть AsyncTasks?

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

3. Это в основном означает, что почти каждая служба, в основном, будет иметь поток, созданный внутри него?

Не обязательно, но вы можете создать Thread внутри него

4. Неправильно ли запустить AsyncTask внутри службы?

Нет. Вы могли бы это сделать.

AsyncTask – отличный способ выполнить фоновую работу. Его методы упрощают обновление UI . Но вам нужно внимательно прочитать документацию (возможно, даже несколько раз), чтобы убедиться, что вы полностью понимаете, как их использовать. Кроме того, помните, что они предназначены для краткосрочных операций, поэтому они могут быть полезны для загрузки сетевых данных, но не должны использоваться для вещей, которые продолжаются более нескольких секунд (согласно документам)

  1. Нить не останавливается сразу после выхода из приложения. Предложение использовать отдельный поток только для того, чтобы вы не блокировали графический интерфейс вашего приложения.

  2. AsyncTasks фактически использует ThreadPool за кулисами, так как создание потока – дорогостоящий процесс. Если у вас много непродолжительных задач, использование AsyncTask – это быстрый, простой и эффективный способ их выполнения без блокировки графического интерфейса вашего приложения.

  3. Да, по существу. Однако сервис более тяжелый, чем поток. Использование сервиса вместо потока – это не очень хорошая идея. Кроме того, на самом деле услуги могут выполняться для выполнения всего другого процесса. Просто FYI.

  4. Нет. Было бы неплохо, если бы у вас было много непродолжительных задач.

Если вы только пытаетесь выполнить задания из основного потока, вам не нужна услуга. Просто создайте другой поток.

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

Однако, если вы обрабатываете огромное количество запросов, вам может потребоваться больше контроля над пулом потоков, выполняющим ваши задачи.

  1. нет

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

  3. Нет, но если вы хотите, чтобы ваша служба делала тяжелую работу, например, загружая вещи из Интернета, она должна использовать асинтез. Большинство служб используются для загрузки данных из Интернета, поэтому большинство из них имеют asynctasks. Обратите внимание, что для того, чтобы служба была сохранена в живых после того, как активность умирает, вы должны указать ее. Службы по умолчанию умирают вместе с деятельностью, если она не настроена должным образом

  4. нет

Возможно, вы запутались в потоке, задаче и процессе. Задача – это небольшой процесс. Процесс – это программа, выполняемая в вашем системном примере при запуске вашего диспетчера задач, который показывает весь процесс, как Internet Explorer, но поток Это небольшой легкий процесс означает, что вы можете сказать, что подпроцесс, который в выполнении для выполнения какой-либо задачи, но асинхронный в android, похож на поток, но может быть длинным. Возьмите пример в android, который вы играете в храме в Android-телефоне, И кто-то звонит вам так, что будет выполняться задача с высоким приоритетом, и текущий поток приостанавливается там, и существует так много методов, как onCreate (), onPause (), вы можете это понять.