ワークマネージャーは新しいAPIであり、毎秒タスクを実行しようとしますが、機能しません。
これは私のワーカークラスです
class TestingWorker : Worker(){
override fun doWork(): Result {
Log.i("CheckWorker","Result here")
return Result.SUCCESS
}
}
そして、これは私がそれを呼んだ場所です。
val recurringWork: PeriodicWorkRequest = PeriodicWorkRequest.Builder(TestingWorker::class.Java, 1, TimeUnit.SECONDS).build()
WorkManager.getInstance()?.enqueue(recurringWork)
2つの定期的な作業要求の最小間隔は15分であり、これは MIN_PERIODIC_INTERVAL_MILLIS で定義されているため、機能していません。
ドキュメント に基づく:
間隔期間ごとに1回定期的に実行されるPeriodicWorkRequestを作成します。 PeriodicWorkRequestは、この間隔中に1回だけ実行されることが保証されています。 intervalMillisはPeriodicWorkRequest.MIN_PERIODIC_INTERVAL_MILLIS以上である必要があります。すぐに、期間の終わりに、またはその時点で他の条件が満たされている限り、その間のいつでも実行できます。
頻繁に作業をスケジュールしないようにすることをお勧めします。これは、より多くのリソースを消費し、最終的にバッテリー寿命に影響を与えることになります。
WorkManagerは、毎秒タスクを実行するようには設計されていません。
PeriodicWorkRequest
-15分ごとに繰り返しタスクを実行します。時間間隔を15分未満に変更しても、デフォルトでは15分のみ実行されます。OneTimeWorkRequest
-1回実行WorkManagerは作業要求をキューに入れ、それぞれのWorkerクラスを呼び出して、各workerclassが実際のタスクが定義されているdoWork()
をオーバーライドするタスクを実行します。
このメソッドはバックグラウンドスレッドで実行され、10分間実行された後、ワーカーが停止します。
したがって、1秒ごとに実行するタスクをよりよく実行する場合、またはフォアグラウンドサービスを実行する場合、または短時間でタスクを実行する場合。
バックグラウンドタスクをより長い期間実行する場合、ベストプラクティスはそれを避けることです。