制約とスケジューリング
適切な条件のもとで処理を実行します
「制約とスケジューリング」は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など)setRequiresChargingsetRequiresBatteryNotLowsetRequiresDeviceIdlesetRequiresStorageNotLow
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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- WorkManagerを使う場面
- Workerを作成する
- 制約とスケジューリング
- 定期処理と連結処理