android開発で スレッドを扱う際に出てくる用語に
Excecutor, Looper, Workerなどのクラスの名前がありますが、
これらはどのような役割で、どういうところが違うのか
説明していただけないでしょうか?
↓ あとは Handlerもあるようだ
Android開発において、
スレッドを扱う際に登場する **Executor**, **Looper**, **Worker** には、
それぞれ異なる役割があります。
それぞれのクラスや概念の役割と違いを簡単に説明します。
---
### 1. **Executor**
- **概要**: `Executor` はスレッド管理を簡略化するためのインターフェースです。
- **役割**:
- スレッドの作成やスケジューリングを管理します。
- 直接スレッドを作成する代わりに、タスク(`Runnable`)をキューに追加して、
バックグラウンドで実行する仕組みを提供します。
- シンプルなマルチスレッドの実装を容易にします。
- **例**:
- シングルスレッドで順次実行する `Executors.newSingleThreadExecutor()`。
- スレッドプールを管理する `Executors.newFixedThreadPool(int nThreads)`。
- Android特化の `Executors.newCachedThreadPool()`。
```kotlin
val executor = Executors.newSingleThreadExecutor()
executor.execute {
println("Running on a background thread")
}
```
- **主な用途**:
- バックグラウンドタスクの簡単な実装。
- 非同期タスクの並列処理。
---
### 2. **Looper**
- **概要**:
`Looper` はスレッドが「イベントループ」を実行できるようにするクラスです。
- **役割**:
- スレッドがキューに積まれたメッセージ(タスク)を
1つずつ取り出して処理する仕組みを提供します。
- 特にメインスレッド(UIスレッド)で使用されます。
- メインスレッドには自動的に `Looper` が設定されますが、
バックグラウンドスレッドでは手動で作成する必要があります。
- **例**:
```kotlin
val thread = Thread {
Looper.prepare() // Looperを初期化
val looper = Looper.myLooper() // 現在のスレッドのLooperを取得
Looper.loop() // メッセージループを開始
}
thread.start()
```
- **主な用途**:
- 非UIスレッドでのメッセージループ処理。
- `Handler` と組み合わせて非同期処理のメッセージ送信。
---
### 3. **Worker**
- **概要**: `Worker` は Android の WorkManager ライブラリで使用されるクラスです。
- **役割**:
- 長時間実行するバックグラウンドタスク(例: データ同期、ログ送信など)を扱います。
- タスクのスケジュールや実行状態の管理を簡単にします。
- アプリが終了してもタスクを実行できる(システムによる再スケジューリングのサポート)。
- **例**:
```kotlin
class MyWorker(context: Context, params: WorkerParameters) : Worker(context, params) {
override fun doWork(): Result {
// バックグラウンド処理
return Result.success()
}
}
```
- **主な用途**:
- 長時間のバックグラウンドタスク。
- OSの状態に応じたタスク管理(例: ネットワークが利用可能なときにのみ実行)。
---
### まとめ
- **Executor** は短いタスクを非同期で処理するのに便利。
- **Looper** はイベントドリブンなタスク管理をしたいときに使用。
- **Worker** は信頼性の高いスケジューリングを必要とする長時間タスクに最適。
各クラスは役割が異なるため、用途に応じて選択して使用します。
コメント
コメントを投稿