web-dev-qa-db-fra.com

Quel est le lien entre JobIntentService et JobService?

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)?

19
justanoob

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.

8
ctate

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.

8
Niveditha Kabbur

En fait, JobIntentService serait mieux si renommé en JobedIntendService, on s'obscurcit avec JobService à première vue.

0
user1611552