Habituellement, lorsque je crée un service Android, j'implémente la onCreate
méthode, mais dans mon dernier projet, cela ne fonctionne pas. J'ai essayé de mettre en œuvre onStartCommand
, et cela semble fonctionner.
La question est: 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?
android
android-service
oncreate
GVillani82
la source
la source
onCreate
est toujours appelé indépendammentRéponses:
onCreate()
est appelée lorsque l'Service
objet est instancié (ie: lorsque le service est créé ). Vous devriez faire des choses dans cette méthode que vous ne devez faire qu'une seule fois (c'est-à-dire: initialiser certaines variables, etc.).onCreate()
ne sera jamais appelée qu'une seule fois par objet instancié .Vous n'avez besoin de l'implémenter que
onCreate()
si vous voulez / devez initialiser quelque chose qu'une seule fois .onStartCommand()
est appelé chaque fois qu'un client démarre le service en utilisantstartService(Intent intent)
. Cela signifie que celaonStartCommand()
peut être appelé plusieurs fois. Vous devez faire les choses de cette méthode qui sont nécessaires chaque fois qu'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 l'implémentez pas,
onStartCommand()
vous ne pourrez pas obtenir d'informations de la partIntent
du clientonStartCommand()
et votre service ne pourra peut-être pas effectuer de travail utile.la source
startService()
, si le service n'est pas en cours d'exécution, Android créera une instance de la classe de service (il s'agit d'un objet de service) et appellera ensuiteonCreate()
cet objet. Il appellera alorsonStartCommand()
cet objet. Si, quelque temps plus tard, vous appelez à nouveaustartService()
, si le service est toujours en cours d'exécution, Android ne créera pas de nouvel objet de service. Au lieu de cela, il appellera simplementonStartCommand()
l'objet de service existant. Est-ce clair?et chaque fois que le
service
est appelé à l'aide de startService .onStartCommand
sera appelé. et vous pouvez passer n'importe quelle action à effectuer. comme pour un lecteur de musique, vous pouvez jouer, mettre en pause, arrêter d'utiliser l'actionEt vous faites n'importe quoi
operation in service
en envoyant une action et en la recevant suronStartCommand
onCreate
travailler comme un constructeur.Modifier en bref
onCreate()
appelle uniquement pour la première fois que vous démarrez un appelService
AttenduonStartCommand()
chaque fois que vous appelez àstartService
nouveau. Il vous permet de définir une action comme lire, arrêter, mettre en pause la musique.la source