AsyncTask とは
android.os.AsyncTask
クラスは、バックグラウンドで何か処理をしながら、逐次 UI を更新していくときに便利に使用できるユーティリティ・クラスです。
UI の更新処理はメインスレッドで行わなければいけないため、ワーカースレッドから UI 更新する場合は、通常は Handler
オブジェクトを介して処理をメインスレッドに委譲しなければいけません。
AsyncTask
を使用すると、このあたりの処理を隠ぺいすることができます。
AsyncTask で実装するメソッド
AsyncTask
のサブクラスで以下のようなメソッドをオーバーライドし、処理内容を記述します。
ワーカースレッドでの処理内容を doInBackground()
内に記述し、UI の更新処理を onProgressUpdate()
で記述するようにします。
doInBackground(Params...)
- ワーカースレッドで行いたい処理を記述する。UI スレッドとは違うスレッドで実行される。
onProgressUpdate(Progress...)
- UI の更新処理を記述する。UI スレッドで実行される。
doInBackground()
内からprogressUpdate()
をコールすることで、明示的に呼び出す。
- UI の更新処理を記述する。UI スレッドで実行される。
doInBackground()
の実行前と、実行後には、以下のようなメソッドが UI スレッドから呼び出されます。
このメソッドもオーバーライドして、UI の更新処理を記述することができます。
onPreExecute()
onPostExecute(Result)
AsyncTask のキャンセル処理について
doInBackground()
内からcancel()
を呼ぶと、その時点でonPostExecute()
が実行され、その後もdoInBackground()
は継続されます。AsyncTask
の外からcancel()
を呼ぶと、その時点でonCanceled()
が実行され、その後もdoInBackground()
は継続されます。この場合は、onPostExecute()
は呼び出されません。