Помогите Диме помочь помогать помочь помогать

Санаторий Империя, Евпатория Крым

01.08.2016


Реализации AsyncTask могут быть определены и выполнены в любом компоненте приложения, при этом в состоянии RUNNING может существовать сразу несколько экземпляров. Тем не менее все экземпляры AsyncTask совместно используют глобальные, единые для всего приложения свойства. То есть даже если два разных потока одновременно начнут выполнение двух разных задач, они будут выполняться последовательно.


Не имеет значения, выполняются реализации AsyncTask из компонента Activity, Service или из какой-либо другой части приложения, они всегда используют одну и ту же глобальную среду выполнения и запускаются последовательно.


Глобальная среда выполнения приложения для экземпляров AsyncTask создаёт потенциальную опасность ее перенасыщения, вследствие чего могут начаться задержки в работе фоновых задач или хуже того - фоновые задачи вообще не будут выполнены. Хотите отдохнуть? Возьмите путевку в санаторий империя евпатория крым.


Поскольку все экземпляры AsyncTask совместно используют вышеописанную глобальную среду выполнения, они могут оказывать друг на друга воздействие в зависимости от характеристик среды выполнения:


Последовательное выполнение (SERIAL_EXECUTOR)-задачи, выполняющиеся последовательно, не будут обрабатываться в рабочем потоке, пока не закончится обработка всех предшествующих задач в приложении. Это правило применяется ко всем задачам, запущенным вызовом метода executeOnExecutor (AsyncTask. SERIAL_EXECUTOR) или execute (), в версии API level 13 и выше;


Параллельное выполнение (THREAD P00L EXECUT0R) - устройство с 4-ядериым процессором, при условии доступности всех ядер, может обрабатывать пять задач AsyncTask одновременно. При инициализации шестой задачи она будет помещена в очередь ожидания, пока не завершится одна из первых пяти задач и не освободит рабочий поток. Это может показаться странным, так как выше утверждалось, что THREAD P00L EXECUT0R может содержать до 137 задач. Объяснить это разночтение можно на конкретном примере реализации ThreadPoolExecutor с пятью базовыми потоками в пуле. Когда все базовые потоки заняты, данная реализация предпочитает сформировать очередь ожи-дания вместо создания новых потоков.