AndroidでのAsyncTaskの使用心得
AndroidでのAsyncTaskの使用心得
AndroidプログラムではUIスレッドをブロックすることはできません.そうしないと、no respondのダイアログボックスがポップアップされ、プログラムが終了します.このような状況を回避するために、一般的には、インターネットからダウンロードした画像がインタフェースの領域に表示されるように、長い時間実行する必要があるタスクはスレッドに配置されて実行されます.しかし、スレッドバックを使用すると、cpuのオーバーヘッドが大きくなり、スレッドの管理が悪い場合にもno respondボックスがポップアップされます.Androidは、このような状況を処理するためにAsyncTaskクラスを提供しています.例えば、画像をダウンロードし、songImagButtonに表示する必要があります.ダウンロードのロジックはsongImageButtonのinitImageメソッドにあります.
一般的にdoInBackgroundでは、ダウンロード画像やその他の時間のかかるタスクなどのバックグラウンドの論理を実行し、onPostExecuteメソッドはインタフェースを操作するために使用されます.バックグラウンドの論理に戻り値がある場合は、doInBackgroundによって戻り、onPostExecuteメソッドに入力し、インタフェースを更新します.doInBackgroundメソッドとonPostExecuteのパラメータは対応する必要があります.この2つのパラメータはAsyncTaskが宣言した汎用パラメータのリストで指定されています.1つ目はdoInBackgroundが受け入れたパラメータで、2つ目は進捗を表示するパラメータで、3つ目はdoInBackgroundが返し、onPostExecuteが入力したパラメータです.
もちろん個人的にはAsyncTaskはスレッドに完全に取って代わることはできないと思いますが、いくつかの論理が複雑であるか、バックグラウンドで繰り返し実行する必要がある論理ではスレッドが必要になる可能性があります.
AndroidプログラムではUIスレッドをブロックすることはできません.そうしないと、no respondのダイアログボックスがポップアップされ、プログラムが終了します.このような状況を回避するために、一般的には、インターネットからダウンロードした画像がインタフェースの領域に表示されるように、長い時間実行する必要があるタスクはスレッドに配置されて実行されます.しかし、スレッドバックを使用すると、cpuのオーバーヘッドが大きくなり、スレッドの管理が悪い場合にもno respondボックスがポップアップされます.Androidは、このような状況を処理するためにAsyncTaskクラスを提供しています.例えば、画像をダウンロードし、songImagButtonに表示する必要があります.ダウンロードのロジックはsongImageButtonのinitImageメソッドにあります.
private class DrawImageTask extends AsyncTask<Void,Integer,Void>{
// ,
@Override
protected void onPostExecute(Void params) {
// TODO Auto-generated method stub
songImageButton.invalidate();
this.cancel(false);
}
//
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
songImageButton.initImage();
return null;
}
}
一般的にdoInBackgroundでは、ダウンロード画像やその他の時間のかかるタスクなどのバックグラウンドの論理を実行し、onPostExecuteメソッドはインタフェースを操作するために使用されます.バックグラウンドの論理に戻り値がある場合は、doInBackgroundによって戻り、onPostExecuteメソッドに入力し、インタフェースを更新します.doInBackgroundメソッドとonPostExecuteのパラメータは対応する必要があります.この2つのパラメータはAsyncTaskが宣言した汎用パラメータのリストで指定されています.1つ目はdoInBackgroundが受け入れたパラメータで、2つ目は進捗を表示するパラメータで、3つ目はdoInBackgroundが返し、onPostExecuteが入力したパラメータです.
もちろん個人的にはAsyncTaskはスレッドに完全に取って代わることはできないと思いますが、いくつかの論理が複雑であるか、バックグラウンドで繰り返し実行する必要がある論理ではスレッドが必要になる可能性があります.