web-dev-qa-db-ja.com

ワークマネージャーAPIを使用して毎秒タスクを実行する

ワークマネージャーは新しい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)
11
Chivorn

2つの定期的な作業要求の最小間隔は15分であり、これは MIN_PERIODIC_INTERVAL_MILLIS で定義されているため、機能していません。

ドキュメント に基づく:

間隔期間ごとに1回定期的に実行されるPeriodicWorkRequestを作成します。 PeriodicWorkRequestは、この間隔中に1回だけ実行されることが保証されています。 intervalMillisはPeriodicWorkRequest.MIN_PERIODIC_INTERVAL_MILLIS以上である必要があります。すぐに、期間の終わりに、またはその時点で他の条件が満たされている限り、その間のいつでも実行できます。

頻繁に作業をスケジュールしないようにすることをお勧めします。これは、より多くのリソースを消費し、最終的にバッテリー寿命に影響を与えることになります。

27
Sagar

WorkManagerは、毎秒タスクを実行するようには設計されていません。

  • PeriodicWorkRequest-15分ごとに繰り返しタスクを実行します。時間間隔を15分未満に変更しても、デフォルトでは15分のみ実行されます。
  • OneTimeWorkRequest-1回実行

WorkManagerは作業要求をキューに入れ、それぞれのWorkerクラスを呼び出して、各workerclassが実際のタスクが定義されているdoWork()をオーバーライドするタスクを実行します。

このメソッドはバックグラウンドスレッドで実行され、10分間実行された後、ワーカーが停止します。

したがって、1秒ごとに実行するタスクをよりよく実行する場合、またはフォアグラウンドサービスを実行する場合、または短時間でタスクを実行する場合。

バックグラウンドタスクをより長い期間実行する場合、ベストプラクティスはそれを避けることです。

1
Ajay Deepak