2011年11月9日水曜日

AsyncTask 便利だけど注意が必要

Android アプリケーションを開発していると、AsyncTask を利用する機会が
たくさんあると思います。

私が良く使うのは、GridViewやListViewに写真を表示する場合に、
処理時間の掛かる画像ファイルの読み込みを別スレッドで実施するために
AsyncTaskを利用しています。

この時、気をつけなければいけないのはAsyncTaskの呼び出し数です。

例えば1000個の画像ファイルを取得したい時に、1個のファイル毎に
AsyncTaskを呼び出す処理を、for文で実行したりすると
RejectedExecutionExceptionが発生します。
(そんなバカなことをするのは私だけか)

以下のように try~catch で囲んでおきExceptionが発生した場合には、
無視したり、一定時間後に再実行するなど予め対策しておけば問題
ありません。

SampleTask : AsyncTask
try {  SampleTask sampleTask = new SampleTask  sampleTask.execute();} catch(RejectedExecutionException e){  [ユーザ処理]}