ここに何を入れるべきなのか、これらの議論がどこで終わるのか理解できませんか?正確に何を置くべきか、それはどこに行くのか? 3つすべてを含める必要がありますか、または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
または、 Sankar-Ganeshのブログ を参照して、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の使用に関するヒント
メソッドonPreExecute、doInBackground、およびonPostExecuteを手動で呼び出さないでください。これはシステムによって自動的に行われます。
別のAsyncTaskまたはスレッド内でAsyncTaskを呼び出すことはできません。メソッドexecuteの呼び出しは、UIスレッドで実行する必要があります。
OnPostExecuteメソッドはUIスレッドで実行されます(ここで別のAsyncTaskを呼び出すことができます!)。
タスクの入力パラメーターはオブジェクト配列にすることができます。これにより、必要なオブジェクトとタイプを配置できます。
AsyncTask
は、バックグラウンドスレッドで実行されるバックグラウンドタスクです。 Inputを受け取り、Progressを実行して出力。
すなわち
AsyncTask<Input,Progress,Output>
。
私の意見では、AsyncTask
のパラメーターを記憶しようとすると、混乱の主な原因が生じます。
キーは記憶しないです。
タスクで本当に必要なことを視覚化できる場合は、AsyncTask
を正しい署名で書くのは簡単です。
あなたのInput、Progressおよび出力はあり、あなたは行ってもいいでしょう。
doInBackgound()
メソッドは、AsyncTask
で最も重要なメソッドです。
AsyncTask
パラメーターで変更されます。関係を見てみましょう
doInBackground()
とonPostExecute()
、onProgressUpdate()
も関連しています
コードを見せてください
では、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");
次のリンクを参照してください。
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
要するに、AsyncTaskには3つのパラメーターがあります
doInBackground(String ... params)で使用する入力のパラメーター
onProgressUpdate(String ... status)で使用される進行状況を表示するためのパラメーター
onPostExcute(String ... result)で使用される結果のパラメーター
注:-[パラメーターのタイプは、要件に応じて異なる場合があります]