J'ai créé WorkRequest sur WorkManager. Je viens de l'utiliser pour la première fois.
Je suis bloqué pour mettre à jour Repeat Interval lorsque le serveur m'envoie un nouvel intervalle.
Est-ce possible de mettre à jour le runtime Interval de WorkRequest lorsqu'il est modifié côté serveur.
J'ai essayé ce qui suit:
Mon code est:
public static void startLocationTracker() { /** * Getting Default Minutes from General Params */ List<GeneralParamMaster> generalParamMasters = CommonUses.getGeneralSettings(); int repeatInterval = 0; if (generalParamMasters.size() > 0) { repeatInterval = TextUtils.isEmpty(generalParamMasters.get(0).getAutoLatLongTime()) ? DEFAULT_LOCATION_UPDATE_TIME : Integer.parseInt(generalParamMasters.get(0).getAutoLatLongTime()); } PeriodicWorkRequest periodicWork = new PeriodicWorkRequest.Builder(MyWorker.class, repeatInterval, TimeUnit.MINUTES) .addTag("Location") .build(); WorkManager.getInstance().enqueueUniquePeriodicWork("Location", ExistingPeriodicWorkPolicy.REPLACE, periodicWork); }
Ma question / confusion est :: p>
Votre aide serait appréciée.
3 Réponses :
Cela fonctionne parce que vous mettez en file d'attente une nouvelle WorkRequest
en tant que travail périodique unique, en remplaçant tout ce qui était le WorkRequest
précédent et son intervalle.
Gardez à l'esprit qu'il peut arriver que vous remplaciez un PeriodWorker pendant son exécution, car vous utilisez ExistingPeriodicWorkPolicy.REPLACE
. Si un autre worker, associé au même UniqueName
, est en cours d'exécution pendant que vous appelez enqueueUniquePeriodicWork
, le Worker sera annulé et le nouveau sera planifié.
Pour cette raison, il est important de gérer correctement l'annulation dans votre classe Worker
, comme expliqué dans le documentation .
pfmaggi a déjà répondu à cela ci-dessus; si vous appelez cette méthode une deuxième fois, elle remplacera votre WorkRequest d'origine.
Vous pouvez mettre à jour votre intervalle en appelant la même méthode que vous et utiliser ExistingWorkPolicy.REPLACE avec une durée différente.
J'ai publié une solution à une question similaire sur ici .
Le but est de garder votre intervalle dans sharedPrefs, et de vérifier s'il est changé, et en fonction de cette condition, d'utiliser la politique KEEP ou REPLACE.