web-dev-qa-db-fra.com

Exécuter une tâche toutes les secondes à l'aide de l'API Work Manager

Work Manager est une nouvelle API et j'essaie d'exécuter la tâche toutes les secondes, mais cela ne fonctionne pas.

Ceci est ma classe ouvrière

class TestingWorker : Worker(){
    override fun doWork(): Result {
        Log.i("CheckWorker","Result here")
        return Result.SUCCESS
    }
}

et c'est là que je l'ai appelé.

 val recurringWork: PeriodicWorkRequest = PeriodicWorkRequest.Builder(TestingWorker::class.Java, 1, TimeUnit.SECONDS).build()
 WorkManager.getInstance()?.enqueue(recurringWork)
11
Chivorn

Son ne fonctionne pas car, l'intervalle minimum entre deux demandes de travail périodiques est de 15 min qui est défini par MIN_PERIODIC_INTERVAL_MILLIS .

Basé sur documentation :

Crée un PeriodicWorkRequest à exécuter périodiquement une fois par intervalle. PeriodicWorkRequest est garanti pour s'exécuter exactement une fois pendant cet intervalle. L'intervalleMillis doit être supérieur ou égal à PeriodicWorkRequest.MIN_PERIODIC_INTERVAL_MILLIS . Il peut s'exécuter immédiatement, à la fin de la période, ou à tout moment entre les deux pour autant que les autres conditions soient remplies à ce moment.

Je vous recommanderais d'éviter de planifier le travail si fréquemment. Cela finira par consommer plus de ressources et éventuellement affecter la durée de vie de la batterie.

27
Sagar

WorkManager n'est pas conçu pour exécuter des tâches toutes les secondes, car il a deux options pour créer une demande de travail qui est et

  • PeriodicWorkRequest - exécute une tâche répétée toutes les 15 minutes, même si nous modifions l'intervalle de temps à anyhwere <15 minutes, elle s'exécutera par défaut pendant 15 minutes seulement.
  • OneTimeWorkRequest - s'exécute une fois

WorkManager mettra en file d'attente les demandes de travail appelera respectivement les classes Worker pour exécuter la tâche où chaque classe de travail remplace doWork() où la tâche réelle est définie.

Cette méthode s'exécute dans le thread d'arrière-plan et s'exécute pendant 10 minutes, après quoi le travailleur s'arrête.

Par conséquent, si vous souhaitez planifier des tâches qui s'exécutent à chaque seconde, le service d'exécution au premier plan est meilleur ou si vous avez des tâches en cours d'exécution sur une courte durée.

Si vous souhaitez exécuter des tâches en arrière-plan pendant des périodes plus longues, la meilleure pratique consiste à l'éviter.

1
Ajay Deepak