1. ホーム
  2. android

[解決済み] AsyncTask<arg1, arg2, arg3>に渡される引数は何ですか?

2022-04-25 10:16:19

質問

ここに何を書けばいいのか、この引数の行き着く先がわからないのですが?具体的に何を書けばいいのか、どこに書けばいいのか?それとも、1,2,20を含めることができますか?

どのように解決するのですか?

GoogleのAndroidドキュメントによると、:

非同期タスクは、Params、Progress、Resultという3つの汎用型と、onPreExecute、doInBackground、onProgressUpdate、onPostExecuteという4つのステップで定義されています。

AsyncTaskの一般型.

非同期タスクが使用する型は以下の3つです。

Params, the type of the parameters sent to the task upon execution.
Progress, the type of the progress units published during the background computation.
Result, the type of the result of the background computation.

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

 private class MyTask extends AsyncTask<Void, Void, Void> { ... }

あなたはさらに参照することができます。 http://developer.android.com/reference/android/os/AsyncTask.html

また、AsyncTaskの役割については、以下を参照してください。 サンカル・ガネーシュのブログ

さて、典型的なAsyncTaskクラスの構造は次のようなものです。

private class MyTask extends AsyncTask<X, Y, Z>

    protected void onPreExecute(){

    }

このメソッドは、新しいThreadを開始する前に実行されます。入出力の値はないので、変数の初期化など、必要だと思うことをすればよい。

    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();

で、以下のようなステータスを受け取ることができます。

実行中 - タスクが実行中であることを示す。

ペンディング - タスクがまだ実行されていないことを示す。

終了 - onPostExecute(Z)が終了したことを示す。

AsyncTaskの使用に関するヒント

  1. onPreExecute、doInBackground、onPostExecuteの各メソッドを手動で呼び出さないでください。これは、システムによって自動的に行われます。

  2. AsyncTask を別の AsyncTask や Thread の内部で呼び出すことはできません。executeメソッドの呼び出しは、UI Threadで行う必要があります。

  3. onPostExecuteメソッドはUIスレッドで実行されます(ここで、別のAsyncTaskを呼び出すことができます!)。

  4. タスクの入力パラメータはObject配列で、好きなオブジェクトや型を入れることができます。