1

Привет всем Я немного путают о выполнить несколько AsyncTask паралельно в AndroidAndroid Execute Multiple AsyncTask Параллельно

Перед Donut это было только одного средства обработки мы можем выполнить только одну задачу, в то время, но потом она изменилась, и мы может выполнять множественную асинтезную параллель, в этом случае было также ограничено выполнение множественной асинтезы, что мы могли бы выполнить только 138 Async Task thread за раз, по другому, но через некоторое время из сотовой сети она изменилась, и мы можем выполнить 5 asynctask в время и 10 могут находиться в очереди ожидания, но если мы выполним более 15 асинтактов за раз, значит, если я буду выполнять 16 задач за раз, то он будет выполнять 6 задач параллельно, а 10 будет в очереди, это означает, что будет atleast 10 задача в очереди ожидания ждать работы нить, и позже в Kitkat это были изменения, и сначала он получил число процессоров, работающих в настоящее время в Vm, и согласно этому он будет выполнять множественную асинтезу.

Теперь мои вопросы таковы:

  1. чем проблема, чтобы выполнить несколько AsyncTask параллельно.

  2. Почему предел для выполнения только 138 асинтаст за один раз.

  3. Почему он отличается версией Android.

  4. Что именно означает в kitkat, чтобы получить количество процессоров, работающих в настоящее время в виртуальной машине, и в соответствии с этим оно выполнит асинтез.

  5. Что использовать asynctask в фоновом режиме для отслеживания ожидающей асинтезы и выполнения задачи.

Ответьте на мои вопросы.

+1

Это телефон, а не суперкомпьютер. Там должен быть предел. Если андроид позволяет вашему приложению параллельно запускать x asynctasks, другие приложения также будут использовать рычаги и запускать свои x-асинтеты параллельно. Для ОС становится громоздким управлять многими потоками. Следовательно, должен быть предел. У каждой машины есть предел вилки. Он не может создавать новые потоки помимо этого. – Froyo

ответ

0

Цитирование AsyncTask класса от Android разработчиков

AsyncTask предназначен, чтобы быть вспомогательным классом вокруг Thread и обработчика и не представляет собой общие рамки многопоточности. AsyncTasks в идеале следует использовать для коротких операций (несколько секунд в ). Если вам нужно поддерживать непрерывные потоки, настоятельно рекомендуется использовать различные API-интерфейсы, предоставляемые java.util . параллельный пакет, такой как Исполнитель, ThreadPoolExecutor и FutureTask.

Внутренне AsyncTask осуществляется через Executor и один по умолчанию SerialExecutor.

Точка ограничения == количество ядер процессора это то, что если предел был больше, чем будет постоянная гонка между начатыми потоками. Вы знаете, что в конце дня у вас могут быть только потоки, работающие в тот же момент. Во многих случаях эта гонка между потоками не является проблемой, но в некоторой степени она есть. Думаю, Google просто решил, что профессионалы меньше минусов, и поэтому они снова вернулись к SerialExecutor. Опять же, цитата из описания AsyncTask класса:

Начиная с Honeycomb, задачи выполняются в одном потоке, чтобы избежать распространенных ошибок, вызванных параллельным выполнением.

Эти проблемы в основном InterruptedException и IllegalStateException.

Наконец, если вы действительно знаете, что делаете, и у вас есть веская причина переопределить поведение Google по умолчанию, вы можете сделать это, используя AsyncTask.executeOnExecutor(Executor, Object[]), передавая в THREAD_POOL_EXECUTOR.

+0

Realy Оцените свой ответ @Vesko, но я также хочу знать, что если однажды я запустил задачу Async, я могу остановить ее между выполнением, которое я попробовал после вызова метода cancel() с объектом Asynctask, но это не останавливает но в этом случае он не позволяет разрешать вызов onPostExecute(), но метод doinBackground() по-прежнему не останавливает его выполнение. –

+0

Да, вы можете вызвать myAsyncTask.cancel (boolean mayInterruptIfRunning). Прочитайте документацию метода cancel(), чтобы увидеть, как она работает в деталях (это не так понятно, как кажется) – Vesko

+0

Здравствуйте, @Vesko. Можете ли вы сказать мне, кто, кто обрабатывает и отслеживает множественную задачу Async в android, означает держать их в блокирующем потоке и дать им разрешение на выполнение и т. д. в Android-системе. –

Смежные вопросы