web-dev-qa-db-fra.com

Quand utiliser JobIntentService vs WorkManager?

Google a récemment abandonné IntentService à compter du: https://Android.googlesource.com/platform/frameworks/base.git/+/6f8b09029932dfd24945202017639754b00acc2e

Les documents pour IntentService disent maintenant:

 * @deprecated IntentService is subject to all the
 *   <a href="/preview/features/background.html">background execution limits</a>
 *   imposed with Android 8.0 (API level 26). Consider using {@link androidx.work.WorkManager}
 *   or {@link androidx.core.app.JobIntentService}, which uses jobs
 *   instead of services when running on Android 8.0 or higher.

Alors, quelles sont les différences entre JobIntentService et WorkManager et lequel est recommandé dans quelles circonstances?

Google ne mentionne même pas JobIntentService sur cette page, ils ne mentionnent que WorkManager: https://developer.Android.com/guide/background

4
satur9nine

Depuis Android Oreo, nous ne pouvons plus maintenir les services normaux en arrière-plan, car le système:

1-tuez le service après environ une minute si l'application elle-même passe en arrière-plan après le lancement du service

2-lève une exception si le service a été lancé lorsque l'application elle-même est en arrière-plan

IntentService est juste une sous-classe du service normal, qui exécute tout son travail de manière séquentielle sur un thread d'arrière-plan et s'arrête lorsqu'il a fini d'exécuter tout son travail. Mais en tant que service, il est également affecté par les limitations mentionnées ci-dessus.

Maintenant pour le JobIntentService:

Agira comme un IntentService normal sur les appareils pré-Oreo (car nous n'avons aucune limitation) et sur Oreo + utilisera jobScheduler à la place pour obtenir un comportement similaire à IntentService. Il commence juste le travail dès que possible, planifie son travail via JobScheduler, et JobScheduler peut choisir de reporter qui fonctionnent un peu, mais son travail est plus susceptible d'être différé ou interrompu dans les situations à faible mémoire, en mode somnolent ou lorsqu'ils atteignent une limite de temps (~ 10 minutes)

Avec JobIntentService, effectuer certaines configurations est impossible, comme définir spécifiquement dans quelles circonstances nous voulons que nos travaux commencent (par exemple lorsque l'appareil est en cours de chargement ou si nous avons une connexion WIFI), mais avec workmanager nous - peut définir ces contraintes.

Utilisez WorkManager pour les travaux qui ont certains Contraintes, ou pour les travaux/travaux qui sont transactionnels non en cours, ou pour les travaux qui peuvent se produire dans le futur =, et utilisez JobIntentService lorsque vous souhaitez copier le comportement de l'IntentService normal sur Android Oreo + et pour les travaux qui peuvent être légèrement retardés et peuvent prendre plus d'une minute mais moins de 10 minutes environ.

J'espère avoir répondu à votre question.

Cordialement

7
Hady Salhab