Language

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

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

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

<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 つ以上の進行状況を発行することもできます。 これらの値は、 #onProgressUpdate step.< の UI スレッドで公開されます。/li><li>#onProgressUpdate。 #publishProgressの呼び出し後に UI スレッドで呼び出されます。 実行のタイミングは定義されていません。 このメソッドは、バックグラウンド計算の実行中に、ユーザー インターフェイスに任意の形式の進行状況を表示するために使用されます。 たとえば、進行状況バーをアニメーション化したり、テキスト フィールドにログを表示したりするために使用できます。</li><li>#onPostExecute。バックグラウンド計算の完了後に UI スレッドで呼び出されます。 バックグラウンド計算の結果は、parameter.< としてこのステップに渡されます。/li></ol>

<h2>タスクの実行</h2>

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

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

このクラスが正常に動作するためには、いくつかのスレッドルールに従う必要があります。

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

<h2>Memory observability</h2>

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

<ul><li>AsyncTask オブジェクトの構築を含め、 #onPreExecuteのメモリ効果、および #executeの呼び出しの前に実行されたその他の何かが #doInBackgroundに表示されます。 <li>#doInBackgroundのメモリ効果は#onPostExecuteに見えます。 <li>#doInBackgroundの呼び出しの前にある#publishProgressのメモリ効果は、対応する#onProgressUpdate呼び出しに表示されます。 (ただし、#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 つのスレッドで実行されます。

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

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

Javaドキュメント。

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

コンストラクター

名前 説明
AsyncTask()

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

AsyncTask(IntPtr, JniHandleOwnership)

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

プロパティ

名前 説明
Class

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

(継承元 Object)
Handle

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

(継承元 Object)
IsCancelled

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

JniIdentityHashCode

相互運用ランタイムによってこのJava ピアに割り当てられた ID ハッシュ コードを取得します。

(継承元 Object)
JniManagedPeerState

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

(継承元 JavaObject)
JniPeerMembers

この型の JNI ピア メンバー メタデータを提供します。

PeerReference

このJava ピアの JNI オブジェクト参照を取得します。

(継承元 Object)
SerialExecutor

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

ThreadPoolExecutor

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

ThresholdClass

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

ThresholdType

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

メソッド

名前 説明
Cancel(Boolean)

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

Clone()

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

(継承元 Object)
Construct(JniObjectReference, JniObjectReferenceOptions)

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

(継承元 JavaObject)
Dispose()

このJava ピアによって保持されているリソースを解放します。

(継承元 Object)
Dispose(Boolean)

このJava ピアによって保持されているリソースを解放します。

(継承元 Object)
DisposeUnlessReferenced()

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

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

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

Equals(Object)

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

(継承元 JavaObject)
Equals(Object)

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

(継承元 Object)
Execute(IRunnable)

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

Execute(Object[])

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

ExecuteOnExecutor(IExecutor, Object[])

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

Get()

計算が完了するまで必要に応じて待機し、その結果を取得します。

Get(Int64, TimeUnit)

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

GetAsync()

対応する操作を非同期的に実行します。

GetAsync(Int64, TimeUnit)

対応する操作を非同期的に実行します。

GetHashCode()

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

(継承元 Object)
GetStatus()

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

JavaFinalize()
古い.

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

(継承元 Object)
Notify()

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

(継承元 Object)
NotifyAll()

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

(継承元 Object)
OnCancelled()

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

OnCancelled(Object)

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

OnPostExecute(Object)

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

OnPreExecute()

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

OnProgressUpdate(Object[])

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

PublishProgress(Object[])

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

SetHandle(IntPtr, JniHandleOwnership)

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

(継承元 Object)
SetPeerReference(JniObjectReference, JniObjectReferenceOptions)

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

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

このJava配列ラッパーからマネージド配列を作成します。

(継承元 Object)
ToString()

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

(継承元 Object)
UnregisterFromRuntime()

相互運用ランタイムからこのJava ピアの登録を解除します。

(継承元 Object)
Wait()

現在のスレッドが起動するまで待機します。通常は、 <em>notified</em> または <em>interrupted</em>。

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

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

(継承元 Object)
Wait(Int64)

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

(継承元 Object)

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

名前 説明
IJavaPeerable.Disposed()

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

(継承元 JavaObject)
IJavaPeerable.Finalized()

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

(継承元 JavaObject)
IJavaPeerable.JniObjectReferenceControlBlock

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

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

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

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

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

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

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

(継承元 JavaObject)

拡張メソッド

名前 説明
GetJniTypeName(IJavaPeerable)

インスタンス selfの型の JNI 名を取得します。

JavaAs<TResult>(IJavaPeerable)

selfを強制的にTResult入力し、強制型がJava側で有効であることを確認します。

JavaCast<TResult>(IJavaObject)

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

JavaCast<TResult>(IJavaObject)

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

TryJavaCast<TResult>(IJavaPeerable, TResult)

selfを強制的にTResult入力し、強制型がJava側で有効であることを確認します。

適用対象