La classe IntentService
fournit une structure simple pour exécuter
une opération sur un thread d'arrière-plan unique. Cela lui permet de gérer les opérations de longue durée
sans affecter la réactivité de votre interface utilisateur. Par ailleurs, un
IntentService
n'est pas affecté par la plupart des événements de cycle de vie de l'interface utilisateur. Il
continue de s'exécuter dans des circonstances qui arrêteraient AsyncTask
Une IntentService
présente certaines limites:
-
Elle ne peut pas interagir directement avec votre interface utilisateur. Pour placer ses résultats dans l'interface utilisateur,
vous devez les envoyer à un
Activity
. -
Les requêtes de travail sont exécutées de manière séquentielle. Si une opération est en cours d'exécution dans un
IntentService
et que vous lui envoyez une autre requête, celle-ci attend la première opération est terminée. -
Une opération exécutée sur un
IntentService
ne peut pas être interrompue.
Toutefois, dans la plupart des cas, la méthode IntentService
est préférable pour effectuer
des opérations simples en arrière-plan.
Ce guide vous explique comment effectuer les opérations suivantes:
- Créez votre propre sous-classe de
IntentService
. - Créez la méthode de rappel requise,
onHandleIntent()
. - Définir
IntentService
dans votre fichier manifeste.
Gérer les intents entrants
Pour créer un composant IntentService
pour votre application, définissez une classe qui
étend IntentService
et, au sein de celui-ci, définit une méthode qui
remplace onHandleIntent()
. Exemple :
Kotlin
class RSSPullService : IntentService(RSSPullService::class.simpleName) override fun onHandleIntent(workIntent: Intent) { // Gets data from the incoming Intent val dataString = workIntent.dataString ... // Do work here, based on the contents of dataString ... } }
Java
public class RSSPullService extends IntentService { @Override protected void onHandleIntent(Intent workIntent) { // Gets data from the incoming Intent String dataString = workIntent.getDataString(); ... // Do work here, based on the contents of dataString ... } }
Notez que les autres rappels d'un composant Service
standard, tels que
onStartCommand()
sont automatiquement appelés par
IntentService
Dans une IntentService
, vous devez éviter
en remplaçant ces rappels.
Pour en savoir plus sur la création d'un IntentService
, consultez la section Étendre la
IntentService.
Définir le service d'intent dans le fichier manifeste
Un IntentService
a également besoin d'une entrée dans le fichier manifeste de votre application.
Fournissez cette entrée en tant que
<service>
qui est un enfant de
Élément
<application>
:
<application android:icon="@drawable/icon" android:label="@string/app_name"> ... <!-- Because android:exported is set to "false", the service is only available to this app. --> <service android:name=".RSSPullService" android:exported="false"/> ... </application>
L'attribut android:name
spécifie le nom de classe de la
IntentService
Notez que
<service>
ne contient pas d'élément
filtre d'intent. La
Activity
qui envoie des requêtes de travail au service utilise un
Intent
explicite. Aucun filtre n'est donc nécessaire. De plus,
signifie que seuls les composants de la même application ou d'autres applications ayant
le même ID utilisateur peut accéder au service.
Maintenant que vous disposez de la classe IntentService
de base, vous pouvez envoyer des requêtes de travail
avec des objets Intent
. La procédure de construction de ces objets
et leur envoi à votre IntentService
est décrit dans
Envoyez des requêtes de travail au service d'arrière-plan.