なぜ、どのように、どのパラメーターが Asynctask<> に渡されるかについては、こちらの詳細を参照してください。もっともな説明だと思います。
Google の Android ドキュメントには次のように書かれています。
非同期タスクは、Params、Progress、および Result と呼ばれる 3 つのジェネリック タイプと、onPreExecute、doInBackground、onProgressUpdate、および onPostExecute と呼ばれる 4 つのステップによって定義されます。
AsyncTask のジェネリック型:
非同期タスクで使用される 3 つのタイプは次のとおりです。
Params、実行時にタスクに送信されるパラメーターのタイプ。進行状況、バックグラウンド計算中に発行された進行状況単位のタイプ。結果、バックグラウンド計算の結果の型。すべての型が常に非同期タスクで使用されるわけではありません。タイプを未使用としてマークするには、単にタイプ 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」があります。これらは入力パラメーターの型です)、型からオブジェクトを返します。 「ズ」。
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(); 次のステータスを受け取ることができます。
RUNNING - タスクが実行中であることを示します。
PENDING - タスクがまだ実行されていないことを示します。
FINISHED - onPostExecute(Z) が終了したことを示します。
AsyncTask の使用に関するヒント
メソッド onPreExecute、doInBackground、および onPostExecute を手動で呼び出さないでください。これは、システムによって自動的に行われます。
別の AsyncTask または Thread 内で AsyncTask を呼び出すことはできません。メソッド execute の呼び出しは、UI スレッドで行う必要があります。
メソッド onPostExecute は UI スレッドで実行されます (ここで別の AsyncTask を呼び出すことができます)。
タスクの入力パラメーターはオブジェクト配列にすることができます。このようにして、必要なオブジェクトとタイプを配置できます。