Androidの非同期タスクの仕組み
Androidの非同期タスクは、スレッドプールを使用して非同期動作を実施するものです。
Androidでは、非同期タスクの実行は、準備フェーズと実行フェーズの2つの段階に分かれています。
準備段階
- AsyncTask のサブクラスを作成し、doInBackground()、onPostExecute() といったメソッドをオーバーライドする。
- 主スレッド上で非同期タスクのインスタンスオブジェクトを作成して、execute() メソッドを呼び出す。
実行フェーズ:
- AsyncTaskはexecute()メソッドの中でまず現在の端末のAndroidのバージョンを判定する。
- AndroidのバージョンがHONEYCOMB(API 11)未満の場合は、スレッドプールから1つのスレッドを呼び出し、非同期タスクを実行します。
- AndroidバージョンがHONEYCOMB(API 11)以降の場合は、タスクの種類に応じてSerialExecutor、THREAD_POOL_EXECUTORなどの異なるスレッドプールを選択し、非同期タスクを実行する。
- 非同期タスクは、バックグラウンドスレッドで doInBackground() メソッドを実行して、時間のかかる処理のロジックを格納します。
- doInBackground()メソッドの実行完了後に、結果が主スレッドに返却され、onPostExecute()メソッドでUI更新が行われる。
スレッドプールの管理により、Androidの非同期タスクはスレッドリソースを効果的に管理し再利用することで、アプリのパフォーマンスと安定性を向上させます。また、時間のかかる処理をバックグラウンドスレッドで実行することで、メインスレッドのブロックを防ぎ、アプリの滑らかさとユーザーエクスペリエンスを確保できます。