Workerを作成する
Workerでバックグラウンド処理を定義します
「Workerを作成する」はCoddyKit上の無料Android Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAndroid Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Android Academyコースには全4レッスンが含まれています。
ワーカーの作成
WorkManagerでバックグラウンド処理を実行する単位はワーカーです。ワーカーの基底クラスを継承し、そのworkメソッドをオーバーライドしてタスクを定義します。
CoroutineWorker
KotlinではCoroutineWorkerを継承します。doWork()はsuspend関数なので、他のsuspend関数を呼び出したり、バックグラウンド用のディスパッチャーで自然に実行したりできます。
class UploadWorker(
context: Context,
params: WorkerParameters
) : CoroutineWorker(context, params) {
override suspend fun doWork(): Result {
// background work here
return Result.success()
}
}コンストラクター
すべてのワーカーは、コンストラクターでContextとWorkerParametersを受け取り、それらをスーパークラスに渡します。WorkManagerがワーカーをインスタンス化するため、コンストラクターを直接呼び出すことはありません。
doWorkはResultを返す
doWork()は、結果を示すResultを返す必要があります。可能性は3つあります。
Result.success()Result.retry()Result.failure()
Result.success
処理が完了したらResult.success()を返します。処理はキューから削除されます。チェーン内の後続処理に渡す出力データを付加することもできます。
override suspend fun doWork(): Result {
uploadLogs()
return Result.success()
}Result.retry
一時的なネットワークエラーなど、一時的な失敗にはResult.retry()を返します。WorkManagerはバックオフポリシーに従い、後でワーカーを再実行します。
override suspend fun doWork(): Result {
return try {
syncData()
Result.success()
} catch (e: IOException) {
Result.retry()
}
}Result.failure
入力が無効な場合など、再試行しても解決しない恒久的な失敗にはResult.failure()を返します。処理は停止し、依存するチェーン内の処理は実行されません。
入力データの読み取り
キューに追加するときにDataで小さな入力を渡し、ワーカー内でinputDataを使って読み取ります。大きなデータを渡す用途ではないため、サイズは小さく保ってください。
override suspend fun doWork(): Result {
val userId = inputData.getString("user_id") ?: return Result.failure()
sync(userId)
return Result.success()
}出力データの返却
ワーカーは結果にDataを含めて返すことができ、チェーン内の後続ワーカーはそれを入力として受け取ります。これにより、ステップ間で結果を渡せます。
val output = workDataOf("count" to 42)
return Result.success(output)適切なディスパッチャーで実行する
CoroutineWorkerは、デフォルトではDispatchers.Default上でdoWork()を実行します。ブロッキングI/Oを行う場合はwithContext(Dispatchers.IO)に切り替え、Defaultのスレッドプールを使い果たさないようにします。
override suspend fun doWork(): Result = withContext(Dispatchers.IO) {
readAndUploadFile()
Result.success()
}ワーカーを自己完結させる
ワーカーはスケジュールされてから長時間経過した後、新しいプロセスで実行されることがあります。メモリ上のアプリ状態に依存せず、必要な情報は入力データで渡すか、永続ストレージから読み取ってください。
確認テスト
ワーカーの作成について理解度を確認しましょう。
まとめ
ワーカーを作成しました。
CoroutineWorkerを継承し、suspend関数であるdoWork()をオーバーライドするResult.success()、Result.retry()、またはResult.failure()を返すinputDataを読み取り、出力のDataを返す- ブロッキング処理には
Dispatchers.IOを使い、ワーカーを自己完結させる
次は、制約とスケジュール設定です。
よくある質問
「Workerを作成する」レッスンは無料ですか?
はい。「Workerを作成する」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Android Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Android Academyコースには全4レッスンが含まれています。
「Workerを作成する」で何を学びますか?
Workerでバックグラウンド処理を定義します ブラウザで直接実行するハンズオンコードでAndroid Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Android Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのAndroid Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「Workerを作成する」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このAndroid Academyレッスンでコードを書いて実行できますか?
はい。すべてのAndroid Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- WorkManagerを使う場面
- Workerを作成する
- 制約とスケジューリング
- 定期処理と連結処理