0Pricing
Android Academy · レッスン

定期処理と連結処理

バックグラウンドタスクを繰り返し、順番に実行します

「定期処理と連結処理」はCoddyKit上の無料Android Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAndroid Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Android Academyコースには全4レッスンが含まれています。

定期処理とチェーン処理

WorkManagerでは、一度だけ実行するタスクだけでなく、スケジュールに従って処理を繰り返したり、複数のワーカーをチェーンして順番に実行したりできます。このレッスンでは両方を扱います。

PeriodicWorkRequest

繰り返し実行する処理にはPeriodicWorkRequestBuilderを使い、繰り返し間隔を指定します。WorkManagerは指定した間隔ごとにワーカーを再実行します。

val periodic = PeriodicWorkRequestBuilder<SyncWorker>(
    repeatInterval = 1,
    repeatIntervalTimeUnit = TimeUnit.HOURS
).build()

最短間隔は15分

繰り返し間隔の最短値は15分です。15分未満の間隔を指定したリクエストは、15分に調整されます。これはバッテリーを保護するためであり、WorkManagerは秒単位の正確なタイミング制御には適していません。

定期処理は正確ではない

間隔は目安であり、正確なタイマーではありません。システムは処理をまとめて実行し電力を節約するため、実行を遅らせることがあります。時間が重要なタスクではこれに依存しないでください。

一意の定期処理をキューに追加する

enqueueUniquePeriodicWorkを使うと、アプリを起動するたびに同じ定期処理が複数登録されるのを防げます。

WorkManager.getInstance(context).enqueueUniquePeriodicWork(
    "daily_sync",
    ExistingPeriodicWorkPolicy.KEEP,
    periodic
)

チェーン処理とは

チェーン処理では、決められた順序でワーカーを実行します。ステップBは、ステップAが成功した後にのみ開始されます。あるステップの出力が次のステップの入力になります。

beginWithとthen

beginWithでチェーンを開始し、thenで順番に実行するステップを追加します。enqueueを呼び出すと、チェーン全体が登録されます。

WorkManager.getInstance(context)
    .beginWith(compressRequest)
    .then(uploadRequest)
    .then(cleanupRequest)
    .enqueue()

チェーン内でデータを受け渡す

あるワーカーの出力Dataは、次のワーカーの入力として渡されます。そのため、compressRequestがファイルパスを返し、uploadRequestが自身のinputDataからそのパスを読み取ることができます。

チェーン内の並列ステップ

beginWithにリストを渡すと、複数のワーカーを並列実行できます。次のthenは、すべてのワーカーが完了するまで待機します。

WorkManager.getInstance(context)
    .beginWith(listOf(downloadA, downloadB))
    .then(mergeRequest)
    .enqueue()

失敗するとチェーンが停止する

いずれかのワーカーがResult.failure()を返すと、チェーンの残りのステップはキャンセルされます。一方、retry()の場合は、そのステップが最終的に成功するまでチェーンが一時停止します。

制約との組み合わせ

チェーン内の各リクエストや各定期リクエストには、それぞれ独自の制約を設定できます。たとえば、アップロードのステップだけ従量制でないネットワークを必要とし、圧縮はいつでも実行できるように設定できます。

確認テスト

定期処理とチェーン処理について理解度を確認しましょう。

まとめ

定期処理とチェーン処理について学びました。

  • PeriodicWorkRequestBuilderで処理を繰り返す。最短間隔は15分で、正確なタイミングにはならない
  • beginWith().then()でワーカーを順番にチェーンする
  • 出力データは次のステップに渡され、リストを使うと並列実行される
  • 失敗するとチェーンがキャンセルされ、各ステップに独自の制約を設定できる

これでWorkManagerのコースは終了です。

よくある質問

「定期処理と連結処理」レッスンは無料ですか?

はい。「定期処理と連結処理」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Android Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Android Academyコースには全4レッスンが含まれています。

「定期処理と連結処理」で何を学びますか?

バックグラウンドタスクを繰り返し、順番に実行します ブラウザで直接実行するハンズオンコードでAndroid Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Android Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのAndroid Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「定期処理と連結処理」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このAndroid Academyレッスンでコードを書いて実行できますか?

はい。すべてのAndroid Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. WorkManagerを使う場面
  2. Workerを作成する
  3. 制約とスケジューリング
  4. 定期処理と連結処理
← Android Academyに戻る