AsyncTask クラス

定義

AsyncTask は、UI スレッドを適切かつ簡単に使用できるようにすることを目的としていました。

[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 は、UI スレッドを適切かつ簡単に使用できるようにすることを目的としていました。 ただし、最も一般的なユース ケースは UI に統合することで、構成の変更時にコンテキスト リーク、コールバックの不在着信、またはクラッシュを引き起こします。 また、プラットフォームの異なるバージョンで一貫性のない動作があり、 から doInBackground例外が取り込まれ、 を直接使用する Executorよりも多くのユーティリティは提供されません。

AsyncTask は、ヘルパー Thread クラスとして設計されており、 Handler 汎用スレッド フレームワークを構成しません。 AsyncTasks は、短い操作 (最大で数秒) に使用することが理想的です。スレッドを長時間実行し続ける必要がある場合は、、、 などのExecutorThreadPoolExecutorFutureTaskパッケージによってjava.util.concurrent提供されるさまざまな API を使用することを強くお勧めします。

非同期タスクは、バックグラウンド スレッドで実行され、その結果が UI スレッドで発行される計算によって定義されます。 非同期タスクは、、および と呼ばれる 3 つのジェネリック型 、、および と呼ばれる ParamsonPostExecuteonProgressUpdatedoInBackgroundonPreExecuteProgress 4 つのステップによって定義されます。Result

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

タスクとスレッドの使用の詳細については、「 プロセスとスレッド 」開発者ガイドを参照してください。

</部>

<h2>Usage</h2>

AsyncTask を使用するには、サブクラス化する必要があります。 サブクラスは少なくとも 1 つのメソッド (#doInBackground) をオーバーライドし、ほとんどの場合、2 つ目のメソッド (.) をオーバーライドします。#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>

非同期タスクで使用される 3 つの型は次のとおりです。

<ol><li>Params:実行時にタスクに送信されるパラメーターの種類。</li li>Progress<>。バックグラウンド計算中に公開される進行状況単位の種類です。</li li>Result<>:バックグラウンド計算の結果の型。</li></ol>

すべての型が非同期タスクで常に使用されるわけではありません。 型を未使用としてマークするには、 型 Voidを使用します。

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

<h2>4 ステップ</h2>

非同期タスクが実行されると、タスクは次の 4 つの手順を実行します。

<ol><li>#onPreExecute()。タスクが実行される前に UI スレッドで呼び出されます。 この手順は、通常、ユーザー インターフェイスに進行状況バーを表示することで、タスクを設定するために使用されます。</li li>#doInBackground<>。 の実行が完了した直後#onPreExecute()にバックグラウンド スレッドで呼び出されます。 この手順は、長い時間がかかる可能性があるバックグラウンド計算を実行するために使用されます。 非同期タスクのパラメーターは、この手順に渡されます。 計算の結果は、このステップによって返される必要があり、最後のステップに戻されます。 この手順では、 を使用 #publishProgress して、1 つ以上の進行単位を発行することもできます。 これらの値は、手順で UI スレッドで#onProgressUpdate公開されます。</li li>#onProgressUpdate<>。への呼び出し後に UI スレッドで呼び出#publishProgressされます。 実行のタイミングは未定義です。 このメソッドは、バックグラウンド計算の実行中に、ユーザー インターフェイスで任意の形式の進行状況を表示するために使用されます。 たとえば、進行状況バーをアニメーション化したり、テキスト フィールドにログを表示したりするために使用できます。<バックグラウンド計算の完了後に UI スレッドで呼び出される /li li>><#onPostExecute。 バックグラウンド計算の結果は、パラメーターとしてこのステップに渡されます。</li></ol>

<h2>タスク<の取り消し/h2>

タスクは、 を呼び出すことによっていつでも取り #cancel(boolean)消すことができます。 このメソッドを呼び出すと、後続の 呼び出しで #isCancelled() true が返されます。 このメソッドを呼び出すと、 #onCancelled(Object)#onPostExecute(Object) 代わりに、 が戻った後 #doInBackground(Object[]) に呼び出されます。 タスクが可能な限り迅速に取り消されるようにするには、可能な場合は 、 から#doInBackground(Object[])定期的に の#isCancelled()戻り値を常にチェックする必要があります (たとえば、ループ内)。

<h2>スレッドルール</h2>

このクラスを適切に動作させるには、いくつかのスレッドルールに従う必要があります。

<ul><li>AsyncTask クラスは UI スレッドに読み込む必要があります。 これは、 の時点でandroid.os.Build.VERSION_CODES#JELLY_BEAN自動的に行われます。</li li><>タスク インスタンスは UI スレッドで作成する必要があります。</li li>#execute<> は UI スレッドで呼び出す必要があります。</li li><>、 を#doInBackground#onPostExecute#onProgressUpdate手動で呼び出#onPreExecute()さないでください。</li li><>タスクは 1 回だけ実行できます (2 回目の実行が試行されると例外がスローされます)。</li></ul>

<h2>メモリ監視/<h2>

AsyncTask では、明示的な同期を行わずに次のことを保証するために、すべてのコールバック呼び出しが同期されることが保証されます。

<ul><li>AsyncTask オブジェクトの #onPreExecute構築を含め、 の呼び出し #executeの前に実行された のメモリ効果と、その他の実行内容は に #doInBackground表示されます。 <li>の #doInBackground メモリ効果は に #onPostExecute表示されます。 <li>への呼び出しの#doInBackground前のメモリ効果は、対応する#onProgressUpdate呼び出#publishProgressしに表示されます。 (ただし、 #doInBackground 引き続き実行され、 の後の #doInBackground 更新が進行中 #onProgressUpdate の呼び出し <に干渉しないように注意する必要があります)。li>の #cancel 呼び出しの前のメモリ効果は、結果として true を返す の #isCancelled 呼び出しの後、または の呼び出し中および呼び出し後に #onCancelled表示されます。 </ul>

<h2>実行<順序/h2>

最初に導入されたとき、AsyncTasks は 1 つのバックグラウンド スレッドで順次実行されました。 以降、 android.os.Build.VERSION_CODES#DONUTこれはスレッドのプールに変更され、複数のタスクを並列で動作できるようになりました。 以降では android.os.Build.VERSION_CODES#HONEYCOMB、並列実行によって発生する一般的なアプリケーション エラーを回避するために、タスクが 1 つのスレッドで実行されます。

本当に並列実行が必要な場合は、 を使用して #THREAD_POOL_EXECUTORを呼び出#executeOnExecutor(java.util.concurrent.Executor, Object[])すことができます。

このメンバーは非推奨とされます。 代わりに、標準 java.util.concurrent または Kotlin コンカレンシー ユーティリティを 使用してください。

android.os.AsyncTaskJava ドキュメント。

このページの一部は、によって作成および共有された作業に基づく変更であり、に記載されている条件に従って使用されます。

コンストラクター

AsyncTask()

新しい非同期タスクを作成します。

AsyncTask(IntPtr, JniHandleOwnership)

JNI オブジェクトのマネージド表現を作成するときに使用されるコンストラクター。ランタイムによって呼び出されます。

プロパティ

Class

この Objectのランタイム クラスを返します。

(継承元 Object)
Handle

基になる Android インスタンスへのハンドル。

(継承元 Object)
IsCancelled

このタスクが true 正常に完了する前に取り消された場合は を返します。

JniIdentityHashCode

AsyncTask は、UI スレッドを適切かつ簡単に使用できるようにすることを目的としていました。

(継承元 Object)
JniPeerMembers

AsyncTask は、UI スレッドを適切かつ簡単に使用できるようにすることを目的としていました。

PeerReference

AsyncTask は、UI スレッドを適切かつ簡単に使用できるようにすることを目的としていました。

(継承元 Object)
SerialExecutor

Executor一度に 1 つずつ順番にタスクを実行する 。

ThreadPoolExecutor

Executorタスクを並列で実行するために使用できる 。

ThresholdClass

この API は Mono for Android インフラストラクチャをサポートしており、コードから直接使用するためのものではありません。

ThresholdType

この API は Mono for Android インフラストラクチャをサポートしており、コードから直接使用するためのものではありません。

メソッド

Cancel(Boolean)

このタスクの実行を取り消そうとします。

Clone()

このオブジェクトのコピーを作成して返します。

(継承元 Object)
Dispose()

AsyncTask は、UI スレッドを適切かつ簡単に使用できるようにすることを目的としていました。

(継承元 Object)
Dispose(Boolean)

AsyncTask は、UI スレッドを適切かつ簡単に使用できるようにすることを目的としていました。

(継承元 Object)
DoInBackground(Object[])

バックグラウンド スレッドで計算を実行するには、このメソッドをオーバーライドします。

Equals(Object)

他のオブジェクトがこのオブジェクトと "等しい" かどうかを示します。

(継承元 Object)
Execute(IRunnable)

単純な Runnable オブジェクトで使用するための 便利な バージョン #execute(Object...)

Execute(Object[])

指定したパラメーターを使用してタスクを実行します。

ExecuteOnExecutor(IExecutor, Object[])

指定したパラメーターを使用してタスクを実行します。

Get()

計算が完了するまで必要な場合は 待機し、その結果を取得します。

Get(Int64, TimeUnit)

計算が完了するまで、必要に応じて最大で指定された時間待機し、その結果を取得します。

GetAsync()

AsyncTask は、UI スレッドを適切かつ簡単に使用できるようにすることを目的としていました。

GetAsync(Int64, TimeUnit)

AsyncTask は、UI スレッドを適切かつ簡単に使用できるようにすることを目的としていました。

GetHashCode()

オブジェクトのハッシュ コード値を返します。

(継承元 Object)
GetStatus()

このタスクの現在の状態を返します。

JavaFinalize()

オブジェクトへの参照がなくなったとガベージ コレクションが判断したときに、オブジェクトのガベージ コレクターによって呼び出されます。

(継承元 Object)
Notify()

このオブジェクトのモニターで待機している 1 つのスレッドを起動します。

(継承元 Object)
NotifyAll()

このオブジェクトのモニターで待機しているすべてのスレッドを起動します。

(継承元 Object)
OnCancelled()

アプリケーションでは、 をオーバーライドすることをお勧め #onCancelled(Object)しています。

OnCancelled(Object)

が呼び出され#doInBackground(Object[])、完了した後#cancel(boolean)に UI スレッドで実行されます。

OnPostExecute(Object)

の後 #doInBackgroundの UI スレッドで実行されます。

OnPreExecute()

の前 #doInBackgroundの UI スレッドで実行されます。

OnProgressUpdate(Object[])

が呼び出された後 #publishProgress に UI スレッドで実行されます。

PublishProgress(Object[])

このメソッドは、 から #doInBackground 呼び出して、バックグラウンド計算の実行中に UI スレッドで更新プログラムを発行できます。

SetHandle(IntPtr, JniHandleOwnership)

Handle プロパティを設定します。

(継承元 Object)
ToArray<T>()

AsyncTask は、UI スレッドを適切かつ簡単に使用できるようにすることを目的としていました。

(継承元 Object)
ToString()

オブジェクトの文字列形式を返します。

(継承元 Object)
UnregisterFromRuntime()

AsyncTask は、UI スレッドを適切かつ簡単に使用できるようにすることを目的としていました。

(継承元 Object)
Wait()

現在のスレッドが起動するまで待機します。通常<は、通知</em> または>< em 中断</em によって待機します>。>

(継承元 Object)
Wait(Int64)

現在のスレッドが起動するまで待機します。通常<は、通知></em> または <>em 中断</em>、または特定のリアルタイムが経過するまで待機します。

(継承元 Object)
Wait(Int64, Int32)

現在のスレッドが起動するまで待機します。通常<は、通知></em> または <>em 中断</em>、または特定のリアルタイムが経過するまで待機します。

(継承元 Object)

明示的なインターフェイスの実装

IJavaPeerable.Disposed()

AsyncTask は、UI スレッドを適切かつ簡単に使用できるようにすることを目的としていました。

(継承元 Object)
IJavaPeerable.DisposeUnlessReferenced()

AsyncTask は、UI スレッドを適切かつ簡単に使用できるようにすることを目的としていました。

(継承元 Object)
IJavaPeerable.Finalized()

AsyncTask は、UI スレッドを適切かつ簡単に使用できるようにすることを目的としていました。

(継承元 Object)
IJavaPeerable.JniManagedPeerState

AsyncTask は、UI スレッドを適切かつ簡単に使用できるようにすることを目的としていました。

(継承元 Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

AsyncTask は、UI スレッドを適切かつ簡単に使用できるようにすることを目的としていました。

(継承元 Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

AsyncTask は、UI スレッドを適切かつ簡単に使用できるようにすることを目的としていました。

(継承元 Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

AsyncTask は、UI スレッドを適切かつ簡単に使用できるようにすることを目的としていました。

(継承元 Object)

拡張メソッド

JavaCast<TResult>(IJavaObject)

Android ランタイムチェック型変換を実行します。

JavaCast<TResult>(IJavaObject)

AsyncTask は、UI スレッドを適切かつ簡単に使用できるようにすることを目的としていました。

GetJniTypeName(IJavaPeerable)

AsyncTask は、UI スレッドを適切かつ簡単に使用できるようにすることを目的としていました。

適用対象