AsyncTask クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
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 は、短い操作 (最大で数秒) に使用することが理想的です。スレッドを長時間実行し続ける必要がある場合は、、、 などのExecutor
ThreadPoolExecutor
FutureTask
パッケージによってjava.util.concurrent
提供されるさまざまな API を使用することを強くお勧めします。
非同期タスクは、バックグラウンド スレッドで実行され、その結果が UI スレッドで発行される計算によって定義されます。 非同期タスクは、、および と呼ばれる 3 つのジェネリック型 、、および と呼ばれる Params
onPostExecute
onProgressUpdate
doInBackground
onPreExecute
Progress
4 つのステップによって定義されます。Result
<div class="special reference"><h3>Developer Guides</h3>
タスクとスレッドの使用の詳細については、「 プロセスとスレッド 」開発者ガイドを参照してください。
</部>
<h2>Usage</h2>
AsyncTask を使用するには、サブクラス化する必要があります。 サブクラスは少なくとも 1 つのメソッド (#doInBackground
) をオーバーライドし、ほとんどの場合、2 つ目のメソッド (.) をオーバーライドします。#onPostExecute
サブクラス化の例を次に示します。
private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
protected Long doInBackground(URL... urls) {
int count = urls.length;
long totalSize = 0;
for (int i = 0; i < 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<Void, Void, Void> { ... }
<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.AsyncTask
Java ドキュメント。
このページの一部は、によって作成および共有された作業に基づく変更であり、に記載されている条件に従って使用されます。
コンストラクター
AsyncTask() |
新しい非同期タスクを作成します。 |
AsyncTask(IntPtr, JniHandleOwnership) |
JNI オブジェクトのマネージド表現を作成するときに使用されるコンストラクター。ランタイムによって呼び出されます。 |
プロパティ
Class |
この |
Handle |
基になる Android インスタンスへのハンドル。 (継承元 Object) |
IsCancelled |
このタスクが |
JniIdentityHashCode |
AsyncTask は、UI スレッドを適切かつ簡単に使用できるようにすることを目的としていました。 (継承元 Object) |
JniPeerMembers |
AsyncTask は、UI スレッドを適切かつ簡単に使用できるようにすることを目的としていました。 |
PeerReference |
AsyncTask は、UI スレッドを適切かつ簡単に使用できるようにすることを目的としていました。 (継承元 Object) |
SerialExecutor |
|
ThreadPoolExecutor |
|
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[]) |
指定したパラメーターを使用してタスクを実行します。 |
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) |
が呼び出され |
OnPostExecute(Object) |
の後 |
OnPreExecute() |
の前 |
OnProgressUpdate(Object[]) |
が呼び出された後 |
PublishProgress(Object[]) |
このメソッドは、 から |
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 スレッドを適切かつ簡単に使用できるようにすることを目的としていました。 |