0Pricing
Android Academy · レッスン

制約とスケジューリング

適切な条件のもとで処理を実行します

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

制約とスケジュール設定

ワーカーは何を実行するかを定義します。WorkRequestは、いつ、どのような条件で実行するかを定義します。リクエストを作成して制約を設定し、キューに追加します。

制約とは

制約とは、処理を実行する前に満たされていなければならない条件です。たとえば、ネットワークに接続されていることや、充電中であることなどです。WorkManagerは制約が満たされるまで待機します。

制約の作成

Constraints.Builderを使って必要な条件を宣言します。

val constraints = Constraints.Builder()
    .setRequiredNetworkType(NetworkType.UNMETERED)
    .setRequiresCharging(true)
    .build()

よく使う制約の種類

よく使われる制約には次のものがあります。

  • setRequiredNetworkType(CONNECTED、UNMETEREDなど)
  • setRequiresCharging
  • setRequiresBatteryNotLow
  • setRequiresDeviceIdle
  • setRequiresStorageNotLow

OneTimeWorkRequestの作成

一度だけ実行する処理には、ワーカークラスを指定したOneTimeWorkRequestBuilderを使い、制約を設定します。

val request = OneTimeWorkRequestBuilder<UploadWorker>()
    .setConstraints(constraints)
    .build()

入力データの受け渡し

setInputDataを使ってリクエストに入力データを設定します。ワーカーはinputDataからそのデータを読み取ります。

val request = OneTimeWorkRequestBuilder<UploadWorker>()
    .setInputData(workDataOf("user_id" to "42"))
    .setConstraints(constraints)
    .build()

処理をキューに追加する

WorkManagerのインスタンスを取得し、enqueueを呼び出します。WorkManagerはリクエストを永続化し、制約が満たされると実行します。

WorkManager.getInstance(context).enqueue(request)

バックオフポリシー

ワーカーがretry()を返すと、WorkManagerは再試行する前に待機します。setBackoffCriteriaで戦略を設定し、線形または指数バックオフを選択します。

val request = OneTimeWorkRequestBuilder<UploadWorker>()
    .setBackoffCriteria(
        BackoffPolicy.EXPONENTIAL,
        10, TimeUnit.SECONDS
    )
    .build()

一意の処理

同じ処理が重複してスケジュールされるのを防ぐには、名前と競合ポリシー(KEEP、REPLACE、またはAPPEND)を指定してenqueueUniqueWorkを使います。

WorkManager.getInstance(context).enqueueUniqueWork(
    "sync_job",
    ExistingWorkPolicy.KEEP,
    request
)

処理状態の監視

getWorkInfoByIdFlowまたはLiveDataを使って、リクエストの状態(ENQUEUED、RUNNING、SUCCEEDED、FAILED)を監視できます。UIで進捗を表示する場合に便利です。

WorkManager.getInstance(context)
    .getWorkInfoByIdFlow(request.id)
    .collect { info -> /* react to info.state */ }

タグの追加

addTagでリクエストにタグを付けると、後からタグを使って関連する処理のグループを検索したり、キャンセルしたりできます。たとえば、「upload」の処理をすべて一度にキャンセルできます。

確認テスト

制約とスケジュール設定について理解度を確認しましょう。

まとめ

制約付きの処理をスケジュールしました。

  • Constraints.Builderでネットワークや充電などの条件を設定する
  • OneTimeWorkRequestBuilderでリクエストを作成する
  • enqueue / enqueueUniqueWorkで処理を登録する
  • バックオフを設定し、状態を監視し、処理にタグを付ける

次は、定期処理とチェーン処理です。

よくある質問

「制約とスケジューリング」レッスンは無料ですか?

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

「制約とスケジューリング」で何を学びますか?

適切な条件のもとで処理を実行します ブラウザで直接実行するハンズオンコードでAndroid Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「制約とスケジューリング」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

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