なぜ、どのように、どのパラメータがAsynctask <>に渡されるかについては、こちらをご覧ください。一番いい説明だと思います。
GoogleのAndroidドキュメントは次のように述べています:
非同期タスクは、Params、Progress、Resultと呼ばれる3つのジェネリック型と、onPreExecute、doInBackground、onProgressUpdate、onPostExecuteと呼ばれる4つのステップで定義されます。
AsyncTaskのジェネリック型:
非同期タスクで使用される3つのタイプは次のとおりです。
パラメータ、実行時にタスクに送信されるパラメータのタイプ。進行状況、バックグラウンド計算中に公開される進行状況単位のタイプ。結果、バックグラウンド計算の結果のタイプ。すべてのタイプが常に非同期タスクで使用されるわけではありません。タイプを未使用としてマークするには、Voidタイプを使用します。
private class MyTask extends AsyncTask<Void, Void, Void> { ... }
さらに参照できます:http : //developer.android.com/reference/android/os/AsyncTask.html
または、Sankar-Ganeshのブログを参照して、AsyncTaskの役割を明確にできます。
典型的なAsyncTaskクラスの構造は次のようになります。
private class MyTask extends AsyncTask<X, Y, Z>
protected void onPreExecute(){
}
このメソッドは、新しいスレッドを開始する前に実行されます。入出力値はないので、変数または必要な処理を初期化するだけです。
protected Z doInBackground(X...x){
}
AsyncTaskクラスの最も重要なメソッド。ここでは、バックグラウンドで実行したいすべてのものをメインのスレッドとは別のスレッドに配置する必要があります。ここでは、タイプ「X」のオブジェクトの配列を入力値として(ヘッダーに表示されますか?「... extends AsyncTask」があります。これらは入力パラメーターのタイプです)、タイプからオブジェクトを返します。 「Z」。
protected void onProgressUpdate(Y y){
このメソッドは、メソッドpublishProgress(y)を使用して呼び出され、通常、バックグラウンドで実行している操作の進行状況を示す進行状況バーなど、メイン画面に進行状況や情報を表示する場合に使用されます。
protected void onPostExecute(Z z){
このメソッドは、バックグラウンドでの操作が完了した後に呼び出されます。入力パラメーターとして、doInBackgroundメソッドの出力パラメーターを受け取ります。
X、Y、Zタイプはどうですか?
上記の構造から推測できるように:
X – The type of the input variables value you want to set to the background process. This can be an array of objects.
Y – The type of the objects you are going to enter in the onProgressUpdate method.
Z – The type of the result from the operations you have done in the background process.
このタスクを外部のクラスからどのように呼び出すのですか?次の2行だけです。
MyTask myTask = new MyTask();
myTask.execute(x);
ここで、xはタイプXの入力パラメーターです。
タスクを実行すると、「外部」からそのステータスを確認できます。「getStatus()」メソッドを使用します。
myTask.getStatus(); 次のステータスを受け取ることができます。
実行中-タスクが実行中であることを示します。
PENDING-タスクがまだ実行されていないことを示します。
FINISHED-onPostExecute(Z)が終了したことを示します。
AsyncTaskの使用に関するヒント
メソッドonPreExecute、doInBackground、およびonPostExecuteを手動で呼び出さないでください。これはシステムによって自動的に行われます。
別のAsyncTaskまたはスレッド内でAsyncTaskを呼び出すことはできません。メソッドexecuteの呼び出しは、UIスレッドで行う必要があります。
onPostExecuteメソッドは、UIスレッドで実行されます(ここでは、別のAsyncTaskを呼び出すことができます!)。
タスクの入力パラメーターは、オブジェクト配列にすることができます。これにより、必要なオブジェクトとタイプを配置できます。