Dans le cas de Service
et IntentService
les principales différences sont Service
s'exécute sur le thread principal tandis que IntentService
ne l'est pas, et ce dernier se termine lui-même lorsque le travail est terminé. fait alors que nous devons appeler stopService()
ou stopSelf()
pour arrêter un Service
.
Ces deux éléments peuvent être simplement transmis à startService()
.
Qu'en est-il de JobService
et JobIntentService
?
Prenons l'extrait de code suivant:
JobInfo job = new JobInfo.Builder(id, new ComponentName(context, ExampleJobService.class))
.build();
JobScheduler scheduler = (JobScheduler) context
.getSystemService(Context.JOB_SCHEDULER_SERVICE);
scheduler.schedule(job);
Pouvez ExampleJobService.class
fait référence à la fois à un JobService
et à un JobIntentService
?
Le comportement sera-t-il le même qu'avec Service
et IntentService
(à part JobScheduler
peut ne pas démarrer les travaux immédiatement)?
JobIntentService
est essentiellement un remplacement de IntentService
, offrant une sémantique similaire d'une manière qui "joue Nice" avec Android nouvelles restrictions d'exécution en arrière-plan de O. Il est implémenté comme un travail planifié sur O +, mais qui est abstrait - votre application n'a pas besoin de se soucier que c'est un travail.
Jamais schedule()
un travail directement que vous prévoyez d'utiliser via la classe de support JobIntentService
. JobIntentService
utilise le système enqueue()
dans le planificateur de travaux, et vous ne pouvez pas mélanger et faire correspondre enqueue()
et schedule()
pour le même travail.
JobService est utilisé pour planifier le travail en arrière-plan avec JobScheduler. L'extrait de code ci-dessus pour ExampleJobService.class
peut être utilisé pour démarrer un JobService.
Où as, un JobIntentService peut être démarré en utilisant le code ci-dessous:
// JobIntentService for background task
Intent i = new Intent(context, ExampleJobIntentService.class);
ExampleJobIntentService.enqueueWork(context,i);
JobIntentService est capable de fonctionner à la fois avant et après les appareils Android Oreo.
Lors de l'exécution sur des versions plus anciennes que Oreo de la plateforme, JobIntentService utilisera Context.startService. Lors de l'exécution sur Android O ou version ultérieure, le travail sera distribué en tant que travail via JobScheduler.enqueue.
En fait, JobIntentService serait mieux si renommé en JobedIntendService, on s'obscurcit avec JobService à première vue.