AsyncTask Класс

Определение

AsyncTask предназначен для обеспечения правильного и простого использования потока пользовательского интерфейса.

[Android.Runtime.Register("android/os/AsyncTask", DoNotGenerateAcw=true)]
[Java.Interop.JavaTypeParameters(new System.String[] { "Params", "Progress", "Result" })]
public abstract class AsyncTask : Java.Lang.Object
[<Android.Runtime.Register("android/os/AsyncTask", DoNotGenerateAcw=true)>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "Params", "Progress", "Result" })>]
type AsyncTask = class
    inherit Object
Наследование
AsyncTask
Производный
Атрибуты

Комментарии

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

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

Асинхронная задача определяется вычислением, которое выполняется в фоновом потоке и результат которого публикуется в потоке пользовательского интерфейса. Асинхронная задача определяется 3 универсальными типами, называемыми Params, Progress и , и Result4 шагами с именем onPreExecute, doInBackgroundonProgressUpdate и onPostExecute.

<div class="special reference"><h3>Developer Guides</h3>

Дополнительные сведения об использовании задач и потоков см. в руководстве разработчика по процессам и потокам .

</Div>

<Использование< h2>/h2>

Для использования AsyncTask должен быть подклассом. Подкласс переопределяет по крайней мере один метод (#doInBackground) и чаще всего переопределяет второй (#onPostExecute.)

Ниже приведен пример подклассов:

private class DownloadFilesTask extends AsyncTask&lt;URL, Integer, Long&gt; {
                protected Long doInBackground(URL... urls) {
                    int count = urls.length;
                    long totalSize = 0;
                    for (int i = 0; i &lt; count; i++) {
                        totalSize += Downloader.downloadFile(urls[i]);
                        publishProgress((int) ((i / (float) count) * 100));
                        // Escape early if cancel() is called
                        if (isCancelled()) break;
                    }
                    return totalSize;
                }

                protected void onProgressUpdate(Integer... progress) {
                    setProgressPercent(progress[0]);
                }

                protected void onPostExecute(Long result) {
                    showDialog("Downloaded " + result + " bytes");
                }
            }

После создания задача выполняется очень просто:

new DownloadFilesTask().execute(url1, url2, url3);

<h2>универсальные типы< AsyncTask/h2>

Ниже перечислены три типа, используемых асинхронной задачей.

<ol><li>Params — тип параметров, отправляемых задаче при выполнении.</li><li li>Progress — тип единиц выполнения, опубликованных во время фонового вычисления.</li><li li>Result — тип результата фонового вычисления.</li></ol>

Не все типы всегда используются асинхронной задачей. Чтобы пометить тип как неиспользуемый, просто используйте тип Void:

private class MyTask extends AsyncTask&lt;Void, Void, Void&gt; { ... }

<h2>4 шага</ч2>

При выполнении асинхронной задачи задача проходит 4 шага:

<ol><li>#onPreExecute(), вызывается в потоке пользовательского интерфейса перед выполнением задачи. Этот шаг обычно используется для настройки задачи, например для отображения индикатора выполнения в пользовательском интерфейсе.</li><li,>#doInBackground вызывается в фоновом потоке сразу после #onPreExecute() завершения выполнения. Этот шаг используется для выполнения фоновых вычислений, которые могут занять много времени. На этом шаге передаются параметры асинхронной задачи. Результат вычисления должен быть возвращен на этом шаге и будет передан обратно к последнему шагу. Этот шаг также можно использовать для #publishProgress публикации одной или нескольких единиц хода выполнения. Эти значения публикуются в потоке пользовательского интерфейса на шаге #onProgressUpdate .</li><li,>#onProgressUpdate вызывается в потоке пользовательского интерфейса после вызова #publishProgress. Время выполнения не определено. Этот метод используется для отображения любого вида хода выполнения в пользовательском интерфейсе во время фонового вычисления. Например, его можно использовать для анимации индикатора выполнения или отображения журналов в текстовом поле.</li><li li>#onPostExecute, вызывается в потоке пользовательского интерфейса после завершения фонового вычисления. Результат фонового вычисления передается на этот шаг в качестве параметра.</li></ol>

<h2>Отмена задачи</ч2>

Задачу можно отменить в любой момент, вызвав #cancel(boolean). Вызов этого метода приведет к тому, что последующие вызовы будут #isCancelled() возвращать значение true. После вызова этого метода #onCancelled(Object), вместо #onPostExecute(Object) будет вызываться после #doInBackground(Object[]) возврата . Чтобы задача была отменена как можно быстрее, всегда следует проверка возвращаемое значение периодически из #doInBackground(Object[]), если это возможно (внутри цикла для экземпляра#isCancelled()).

<h2>Правила< потоков/h2>

Существует несколько правил потоков, которые должны соблюдаться для правильной работы этого класса:

<ul><li>Класс AsyncTask должен быть загружен в поток пользовательского интерфейса. Это выполняется автоматически после android.os.Build.VERSION_CODES#JELLY_BEAN.</li><li li>. Экземпляр задачи должен быть создан в потоке пользовательского интерфейса.<Параметр /li><li>#execute должен вызываться в потоке пользовательского интерфейса.</li><li>не вызывайте #onPreExecute(), #onPostExecute, #doInBackground, , #onProgressUpdate вручную.</li><li li>. Задача может быть выполнена только один раз (исключение будет создано при попытке второго выполнения).</li></ul>

<h2>Наблюдаемость< памяти/ч2>

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

<ul>li Эффекты #onPreExecuteпамяти , и все остальные действия, выполненные до вызова #execute, включая конструкцию объекта AsyncTask, видны для #doInBackground.>< <Li>Эффекты #doInBackground памяти видимы для #onPostExecute. <Li>Все эффекты #doInBackground памяти, которые были видны соответствующему #publishProgress#onProgressUpdate вызову. (Но #doInBackground продолжает выполняться, и необходимо соблюдать осторожность, чтобы последующие обновления в #doInBackground не влияли на выполняемый #onProgressUpdate вызов.) <Li>Любые эффекты памяти, предшествующие вызову , #cancel видны после вызова , #isCancelled возвращающего значение true в результате, или во время и после результирующего вызова #onCancelled. </ul>

<h2>Порядок выполнения</h2>

При первом появлении AsyncTasks выполнялись последовательно в одном фоновом потоке. Начиная с android.os.Build.VERSION_CODES#DONUT, эта функция была изменена на пул потоков, позволяющий параллельно работать с несколькими задачами. Начиная с android.os.Build.VERSION_CODES#HONEYCOMB, задачи выполняются в одном потоке, чтобы избежать распространенных ошибок приложения, вызванных параллельным выполнением.

Если вы действительно хотите параллельное выполнение, можно вызвать с #THREAD_POOL_EXECUTORпомощью #executeOnExecutor(java.util.concurrent.Executor, Object[]) .

Этот элемент устарел. Вместо этого используйте стандартные java.util.concurrent программы параллелизма или Kotlin .

Документация по Java для android.os.AsyncTask.

Части этой страницы являются изменениями, основанными на работе, созданной и совместно используемой проектом Android и используемой в соответствии с условиями, Creative Commons 2.5 Attribution License.

Конструкторы

AsyncTask()

Создает новую асинхронную задачу.

AsyncTask(IntPtr, JniHandleOwnership)

Конструктор, используемый при создании управляемых представлений объектов JNI; вызывается средой выполнения.

Свойства

Class

Возвращает класс среды выполнения данного объекта Object.

(Унаследовано от Object)
Handle

Дескриптор базового экземпляра Android.

(Унаследовано от Object)
IsCancelled

Возвращает значение true , если эта задача была отменена до ее нормального завершения.

JniIdentityHashCode

AsyncTask предназначен для обеспечения правильного и простого использования потока пользовательского интерфейса.

(Унаследовано от Object)
JniPeerMembers

AsyncTask предназначен для обеспечения правильного и простого использования потока пользовательского интерфейса.

PeerReference

AsyncTask предназначен для обеспечения правильного и простого использования потока пользовательского интерфейса.

(Унаследовано от Object)
SerialExecutor

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

ThreadPoolExecutor

Объект , Executor который можно использовать для параллельного выполнения задач.

ThresholdClass

Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода.

ThresholdType

Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода.

Методы

Cancel(Boolean)

Пытается отменить выполнение этой задачи.

Clone()

Создает и возвращает копию этого объекта.

(Унаследовано от Object)
Dispose()

AsyncTask предназначен для обеспечения правильного и простого использования потока пользовательского интерфейса.

(Унаследовано от Object)
Dispose(Boolean)

AsyncTask предназначен для обеспечения правильного и простого использования потока пользовательского интерфейса.

(Унаследовано от Object)
DoInBackground(Object[])

Переопределите этот метод для выполнения вычислений в фоновом потоке.

Equals(Object)

Указывает, равен ли какой-то другой объект этому объекту.

(Унаследовано от Object)
Execute(IRunnable)

Удобная версия для #execute(Object...) использования с простым объектом Runnable.

Execute(Object[])

Выполняет задачу с указанными параметрами.

ExecuteOnExecutor(IExecutor, Object[])

Выполняет задачу с указанными параметрами.

Get()

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

Get(Int64, TimeUnit)

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

GetAsync()

AsyncTask предназначен для обеспечения правильного и простого использования потока пользовательского интерфейса.

GetAsync(Int64, TimeUnit)

AsyncTask предназначен для обеспечения правильного и простого использования потока пользовательского интерфейса.

GetHashCode()

Возвращает значение хэш-кода для объекта.

(Унаследовано от Object)
GetStatus()

Возвращает текущее состояние этой задачи.

JavaFinalize()

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

(Унаследовано от Object)
Notify()

Пробуждает один поток, ожидающий монитора этого объекта.

(Унаследовано от Object)
NotifyAll()

Пробуждает все потоки, ожидающие на мониторе этого объекта.

(Унаследовано от Object)
OnCancelled()

Приложения должны предпочтительно переопределять #onCancelled(Object).

OnCancelled(Object)

Выполняется в потоке пользовательского интерфейса после #cancel(boolean) вызова и #doInBackground(Object[]) завершения.

OnPostExecute(Object)

Выполняется в потоке пользовательского интерфейса после #doInBackground.

OnPreExecute()

Выполняется в потоке пользовательского интерфейса до #doInBackground.

OnProgressUpdate(Object[])

Выполняется в потоке пользовательского интерфейса после #publishProgress вызова .

PublishProgress(Object[])

Этот метод можно вызвать из #doInBackground для публикации обновлений в потоке пользовательского интерфейса во время фонового вычисления.

SetHandle(IntPtr, JniHandleOwnership)

Задает свойство Handle.

(Унаследовано от Object)
ToArray<T>()

AsyncTask предназначен для обеспечения правильного и простого использования потока пользовательского интерфейса.

(Унаследовано от Object)
ToString()

Возвращает строковое представление объекта.

(Унаследовано от Object)
UnregisterFromRuntime()

AsyncTask предназначен для обеспечения правильного и простого использования потока пользовательского интерфейса.

(Унаследовано от Object)
Wait()

Вызывает ожидание текущего потока, пока он не пробудится, как правило, из-за <уведомления><<> или>прерывания или прерывания.><

(Унаследовано от Object)
Wait(Int64)

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

(Унаследовано от Object)
Wait(Int64, Int32)

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

(Унаследовано от Object)

Явные реализации интерфейса

IJavaPeerable.Disposed()

AsyncTask предназначен для обеспечения правильного и простого использования потока пользовательского интерфейса.

(Унаследовано от Object)
IJavaPeerable.DisposeUnlessReferenced()

AsyncTask предназначен для обеспечения правильного и простого использования потока пользовательского интерфейса.

(Унаследовано от Object)
IJavaPeerable.Finalized()

AsyncTask предназначен для обеспечения правильного и простого использования потока пользовательского интерфейса.

(Унаследовано от Object)
IJavaPeerable.JniManagedPeerState

AsyncTask предназначен для обеспечения правильного и простого использования потока пользовательского интерфейса.

(Унаследовано от Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

AsyncTask предназначен для обеспечения правильного и простого использования потока пользовательского интерфейса.

(Унаследовано от Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

AsyncTask предназначен для обеспечения правильного и простого использования потока пользовательского интерфейса.

(Унаследовано от Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

AsyncTask предназначен для обеспечения правильного и простого использования потока пользовательского интерфейса.

(Унаследовано от Object)

Методы расширения

JavaCast<TResult>(IJavaObject)

Выполняет преобразование типа, проверенного средой выполнения Android.

JavaCast<TResult>(IJavaObject)

AsyncTask предназначен для обеспечения правильного и простого использования потока пользовательского интерфейса.

GetJniTypeName(IJavaPeerable)

AsyncTask предназначен для обеспечения правильного и простого использования потока пользовательского интерфейса.

Применяется к