115 votes

Android onCreate ou onStartCommand pour le démarrage du service

Habituellement, lorsque je crée un service Android, j'implémente la fonction onCreate mais dans mon dernier projet, cela ne fonctionne pas. J'ai essayé d'implémenter onStartCommand et cela semble fonctionner.

La question est la suivante : lorsque je dois implémenter un service, quelle méthode est requise ? Quelles méthodes dois-je mettre en œuvre ? onCreate , onStartCommand ou les deux ? Et quel est le rôle de chacun ?

205voto

David Wasser Points 23169

onCreate() est appelé lorsque le Service est instancié (c'est-à-dire quand le service est créé ). Dans cette méthode, vous devez faire des choses que vous ne devez faire qu'une seule fois (par exemple, initialiser certaines variables, etc.). onCreate() ne sera appelé qu'une seule fois par objet instancié .

Il suffit de mettre en œuvre onCreate() si vous voulez/devez initialiser quelque chose une seule fois .

onStartCommand() s'appelle à chaque fois un client démarre le service en utilisant startService(Intent intent) . Cela signifie que onStartCommand() peut être appelé plusieurs fois. Vous devez faire les choses nécessaires dans cette méthode à chaque fois un client demande quelque chose à votre service. Cela dépend beaucoup de ce que fait votre service et de la manière dont il communique avec les clients (et vice-versa).

Si vous ne mettez pas en place onStartCommand() alors vous ne serez pas en mesure d'obtenir des informations à partir de la Intent que le client transmet à onStartCommand() et votre service pourrait ne pas être en mesure de faire un travail utile.

13voto

Nepster Points 893

Le service se comporte comme l'activité Tout ce que vous voulez associate Une fois avec un service, on y va onCreate comme l'initialisation

et chaque fois que le service est appelé en utilisant startService . onStartCommand sera appelé et vous pouvez passer n'importe quelle action à exécuter. Par exemple, pour un lecteur de musique, vous pouvez jouer, faire une pause ou arrêter en utilisant l'action.

Et vous faites tout operation in service en envoyant une action et en la recevant sur onStartCommand

onCreate fonctionne comme un constructeur.

Editer en bref

onCreate() uniquement la première fois que vous lancez un Service Considérant que onStartCommand() appelle chaque fois que vous appelez le startService encore. Il vous permet de définir une action comme jouer, arrêter, mettre en pause la musique.

public void onStartCommand()
{
     if(intent.getAction.equals("any.play")
     {
        //play song
     }
     else if(intent.getAction.equals("any.stop")
     {}
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X