web-dev-qa-db-ja.com

どのような引数がAsyncTask <arg1、arg2、arg3>に渡されますか?

ここに何を入れるべきなのか、これらの議論がどこで終わるのか理解できませんか?正確に何を置くべきか、それはどこに行くのか? 3つすべてを含める必要がありますか、または1,2,20を含めることができますか?

152
mergesort

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

または、 Sankar-Ganeshのブログ を参照して、AsyncTaskの役割を明確にすることができます。

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

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

    protected void onPreExecute(){

    }

このメソッドは、新しいスレッドを開始する前に実行されます。入出力値はないので、変数または必要と思われるものを初期化するだけです。

    protected Z doInBackground(X...x){

    }

AsyncTaskクラスの最も重要なメソッド。ここでは、メインのスレッドとは別のスレッドで、バックグラウンドでやりたいことをすべて配置する必要があります。ここでは、入力値として「X」型のオブジェクトの配列があります(ヘッダーに表示されますか?「... extends AsyncTask」があります。これらは入力パラメーターのTYPESです)。型からオブジェクトを返します。 「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();

また、次のステータスを受け取ることができます。

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

PENDING-タスクがまだ実行されていないことを示します。

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

AsyncTaskの使用に関するヒント

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

  2. 別のAsyncTaskまたはスレッド内でAsyncTaskを呼び出すことはできません。メソッドexecuteの呼び出しは、UIスレッドで実行する必要があります。

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

  4. タスクの入力パラメーターはオブジェクト配列にすることができます。これにより、必要なオブジェクトとタイプを配置できます。

479
Kartik Domadiya

私はパーティーに遅すぎるが、これは誰かを助けるかもしれないと思った。

66
mrid

複雑にしないでおく!

AsyncTaskは、バックグラウンドスレッドで実行されるバックグラウンドタスクです。 Inputを受け取り、Progressを実行して出力

すなわちAsyncTask<Input,Progress,Output>

私の意見では、AsyncTaskのパラメーターを記憶しようとすると、混乱の主な原因が生じます。
キーは記憶しないです。
タスクで本当に必要なことを視覚化できる場合は、AsyncTaskを正しい署名で書くのは簡単です。
あなたのInputProgressおよび出力はあり、あなたは行ってもいいでしょう。

例:enter image description here

AsyncTaskの心臓部!

doInBackgound()メソッドは、AsyncTaskで最も重要なメソッドです。

  • このメソッドのみがバックグラウンドスレッドで実行され、UIスレッドにデータを公開します。
  • そのシグネチャは、AsyncTaskパラメーターで変更されます。

関係を見てみましょう

enter image description here

doInBackground()onPostExecute()onProgressUpdate()も関連しています

enter image description here

コードを見せてください
では、DownloadTaskのコードをどのように記述しますか?

DownloadTask extends AsyncTask<String,Integer,String>{

      @Override
      public void onPreExecute()
      {}

      @Override
      public String doInbackGround(String... params)
      {
               // Download code
               int downloadPerc = // calculate that
               publish(downloadPerc);

               return "Download Success";
      }

      @Override
      public void onPostExecute(String result)
      {
          super.onPostExecute(result);
      }

      @Override
      public void onProgressUpdate(Integer... params)
      {
             // show in spinner, access UI elements
      }

}

このタスクをどのように実行しますか

new DownLoadTask().execute("Paradise.mp3");
8
Rohit Singh

次のリンクを参照してください。

  1. http://developer.Android.com/reference/Android/os/AsyncTask.html
  2. http://labs.makemachine.net/2010/05/Android-asynctask-example/

3つ以上の引数を渡すことはできません。1つの引数のみを渡したい場合は、他の2つの引数にvoidを使用します。

1. private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> 


2. protected class InitTask extends AsyncTask<Context, Integer, Integer>

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

KPBird

5
Ketan Parmar
  • 要するに、AsyncTaskには3つのパラメーターがあります

    1. doInBackground(String ... params)で使用する入力のパラメーター

    2. onProgressUpdate(String ... status)で使用される進行状況を表示するためのパラメーター

    3. onPostExcute(String ... result)で使用される結果のパラメーター

    注:-[パラメーターのタイプは、要件に応じて異なる場合があります]

3
Chinki Sai