WorkManagerを用いて短い間隔で定期的に処理を実行する
WorkManagerはwork-runtime-ktx:2.6.0の時点で15分より長い間隔でないと 定期実行できません。1 それを無理やり短い間隔で定期実行する方法です。
Warning
推奨されない方法です。どうしても必要なときだけ仕方なく使いましょう。 ユーザに明示するためにForegroundServiceを利用するのがいいと思います。
環境
- androidx.work:work-runtime-ktx:2.6.0
- ランタイム: Android 9
方法
OneTimeWorkRequestでリクエストした単発タスクの中で、次のタスクをスケジュールするようにします。例えば1分ごとに実行されるタスクは次のように書けます。
/**
* sample of worker
*/
class LogWorker(context: Context, workerParameters: WorkerParameters)
: Worker(context, workerParameters) {
companion object{
/**
* create work request
*/
fun createWorkRequest(): WorkRequest{
return OneTimeWorkRequestBuilder<LogWorker>()
.setInitialDelay(1, TimeUnit.MINUTES)
.build()
}
}
override fun doWork(): Result {
Log.d("LogWorker", "worker doWork")
// request next work
WorkManager.getInstance(applicationContext)
.enqueue(createWorkRequest())
return Result.success()
}
}
最初の1回をリクエストしてあげれば以後1分ごとにバックグラウンドで実行されます。
class SomeActivity: AppCompatActivity(){
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
WorkManager.getInstance(applicationContext)
.enqueue(LogWorker.createWorkRequest())
}
}
最終更新日:
October 6, 2021