AsyncTaskを使った非同期処理|Android開発

      2016/11/22

通常、UIに変更を加える場合はUIスレッド上で実行する必要があります。しかしAsyncTaskを使用するとその部分を意識しなくて良くなります。
UI操作をUIスレッドで行わずに例外発生というのはよくある事(私だけ?)なので、非常に便利です。
また、UIスレッドへ投げる処理の記述が無くなるため、ソースコードがスッキリします。
※但しdoInBackgroundでUI操作は行えません。ここはあくまで別スレッド扱いみたいですね。

基本的な使い方

下記の様にAsyncTaskを継承したクラスを実装します。各メソッドの役割は以下。

  • onPreExecute
    バックグラウンド処理実行前の前処理を行います。(プログレスを表示など)
  • doInBackground
    バックグラウンド処理を行います。
  • onProgressUpdate
    バックグラウンド処理中の進捗更新を行います。(プログレスを更新など)
  • onPostExecute
    バックグラウンド処理終了時の処理を行います。(プログレスを消去など)

AsyncTaskに指定しているジェネリクスは順番に以下のもの。

  • doInBackground引数の型
  • onProgressUpdate引数の型
  • onPostExecute引数の型

  • doInBackgroundの戻り値は、onPostExecuteの引数になる。
  • onProgressUpdatedoInBackgroundから呼び出す。
  • doInBackground以外は実装必須ではない。(必要な場合のみ実装する)

使用例

下記は画像ファイルをバックグラウンドで読み込み、そのオブジェクトをコールバックで通知するものです。

AsyncTask継承クラス

使用例

 - Android