Androidの非同期処理はAsyncTaskで

世間の空前の非同期ブームにのっかって、androidでよく使う非同期処理を実現するためのクラスAsyncTaskについて簡単にまとめてみました。

AsyncTaskは非同期タスク実行後、完了時に画面更新などのシンプルな非同期処理を実現するために使う物です。

AsyncTaskでは、FutureパターンをFutureTaskつかって実現していています。非同期処理後に画面描画などをしたいことが多いと思うのですが、そのためにHandlerの処理とかがAsyntTaskの中に隠蔽されるのは美しいですね。

例えば、はてなダイアリーの更新処理は非同期にして、new PostHatenaDiaryTask().execute(entry) のような感じに使います。PostHatenaDiaryTaskはAsyncTaskをextendしておきます。

AsyncTaskの実装としては、FutureTaskつかって非同期処理。Handlerでメッセージpostして処理。Handlerの処理は、AsyncTask内のInternalHandlerみればOK。画面の更新したい場合はInternalHandlerで呼ばれるonPostExecuteなどなどの処理を実行するという形になってます。
http://github.com/android/platform_frameworks_base/blob/4ea496ddcaad107dda890850933423137582ce40/core/java/android/os/AsyncTask.java

もうちょっと複雑な非同期処理させたい場合も、AsyncTaskは参考になりそうです。java.util.concurrentが使えるので、この辺の非同期処理はいくらでも楽ができそうです。Handlerを隠蔽する部分のところとかは参考になるかなと。

AndroidのHandlerの仕組みは、Androidフレームワークの仕組みに密接に絡む部分なので、最初にソースを読んでおくとよさそうです。

See also: Handlerのソースを読んでみた
http://android.g.hatena.ne.jp/dann/20090627/1246127367