web-dev-qa-db-fra.com

Android onCreate ou onStartCommand pour démarrer le service

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

La question est: quand 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?

88
GVillani82

onCreate() est appelée lorsque l'objet Service est instancié (c'est-à-dire lorsque le service est créé). Dans cette méthode, vous ne devez effectuer les tâches qu'une seule fois (c.-à-d. Initialiser certaines variables, etc.). onCreate() ne sera appelé qu'une fois par objet instancié.

Vous devez uniquement implémenter onCreate() si vous voulez/devez initialiser quelque chose ne seule fois.

onStartCommand() est appelé à chaque fois un client démarre le service avec 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 façon dont il communique avec les clients (et vice-versa).

Si vous n'implémentez pas onStartCommand(), vous ne pourrez obtenir aucune information de la part de Intent que le client transmet à onStartCommand() et votre service pourrait ne pas être disponible. capable de faire un travail utile.

170
David Wasser

Le service se comporte comme l’activité Tout ce que vous voulez associate une fois avec un service ira dans onCreate comme l’initialisation

et chaque fois que service est appelé à l'aide de startService. onStartCommand sera appelé. et vous pouvez passer toute action à effectuer. comme pour un lecteur de musique, vous pouvez jouer, mettre en pause, cesser d'utiliser l'action

Et vous faites n'importe quel operation in service En envoyant une action et en la recevant le onStartCommand

onCreate fonctionne comme un constructeur.

Modifier en bref

onCreate() appelle uniquement pour la première fois que vous démarrez un Service alors que onStartCommand() appelle chaque fois que vous appelez à nouveau startService. 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")
     {}
}
10
Xar E Ahmer