AndroidのAsyncTask(スレッド間通信)
AndroidのAsyncTaskは、バックグラウンドスレッドでのタスク実行とUIスレッドとの通信を行う仕組みです。
AsyncTaskは、ThreadとHandlerをカプセル化したユーティリティクラスであり、バックグラウンドで時間のかかる処理を行いながらUIを更新するプロセスを簡略化しています。
AsyncTaskを使用すると、時間のかかる操作をバックグラウンドスレッドで実行し、完了後にUIスレッドに通知して適切な更新操作を行うことができます。
AsyncTaskには4つのジェネリックパラメータがあります。
- AsyncTaskを実行する際には、Paramsというパラメータ型を指定する必要があります。
- 進行中:バックグラウンドタスクの進行状況の種類。
- 結果:バックグラウンドタスクの実行が完了した後の返り値の種類。
- 状態:バックグラウンドでのタスク実行中の状態の種類。
AsyncTaskには、オーバーライドする必要がある主要な4つのメソッドがあります。
- onPreExecute()メソッドは、バックグラウンドタスクが実行される前に呼び出されるものであり、通常は進行状況バーの表示など、初期化操作を行うために使用されます。
- doInBackground(Params…):このメソッドは、バックグラウンドスレッドで時間のかかる処理を実行し、onPreExecute()メソッドが完了した後に呼び出されます。
- onProgressUpdate(Progress…):バックグラウンドタスクの実行中に、publishProgress()メソッドを呼び出すことでこのメソッドが実行され、UIを更新することができます。例えば、進捗バーを更新することができます。
- onPostExecute(Result):バックグラウンドタスクが完了した後、このメソッドが呼び出され、結果の表示など、UIの更新操作を行うことができます。
AsyncTaskを使用する際は、AsyncTaskクラスを継承したサブクラスを作成し、適切なメソッドを実装する必要があります。その後、タスクを実行する場所でexecute()メソッドを呼び出してタスクを開始します。
AsyncTaskの中で、publishProgress()メソッドを使用して、onProgressUpdate()メソッドをトリガーし、onProgressUpdate()メソッドでUIを更新することができます。
AsyncTaskは一度しか実行できないため、実行が完了した後は新しいインスタンスを作成して次のタスクを実行する必要があります。また、Activityが破棄される際には、実行中のAsyncTaskをキャンセルしてメモリリークを防ぐ必要があります。