web-dev-qa-db-fra.com

android - le service s'arrête lorsque l'activité est détruite

lorsque j'ouvre l'activité de mon projet, j'appelle la méthode startService(Intent intent) pour démarrer un nouveau service. Lorsque l'activité est détruite, le service ne doit pas être tué (car je n'ai pas utilisé la méthode bindService()), mais le fait est que, lorsque je ferme mon activité, le service est tué et, après une seconde, le système crée un nouveau service (j'ai vérifié que le système appelle à nouveau la méthode onCreate() de mon service). Que dois-je faire pour ne garder qu'un seul service? Je vous remercie

13
rickyalbert

Pour faire fonctionner un service indépendamment du processus principal de votre application et vous assurer qu'Android ne le tue pas lorsqu'il fait quelque chose, vous devez faire/essayer deux choses.

  1. Exécutez votre service dans un processus séparé. Vous pouvez y parvenir en ajoutant l'attribut suivant à votre déclaration de service dans le manifeste:

    Android:process=":somenamehere"

  2. Lorsque votre service est en cours d'exécution et que vous ne voulez pas qu'il soit tué par le système d'exploitation, vous devez utiliser la méthode startForeground(int id, Notification notification). Lorsque le service termine ce que vous faites et peut être tué par le système d'exploitation, appelez stopForeground(boolean removeNotification). "startForeground" nécessite une notification en tant qu'argument, car chaque service de premier plan doit afficher une notification pour que l'utilisateur s'en rende compte.

J'espère que ceci vous aide.

19
Miguel Botón

Je veux dire que je tiens le bouton d'accueil, puis tue mon activité de la liste des applications ouvertes

Cela ne "ferme" pas une activité. Cela met fin à votre processus. L'utilisateur est invité à mettre fin à votre processus à tout moment, qu'il le souhaite ou via des applications tierces du gestionnaire de tâches. Vous ne pouvez rien y faire - vous ne pouvez pas empêcher l'utilisateur de mettre fin à votre processus. Etant donné que votre processus s’arrêtera pour d’autres raisons également (par exemple, le grand âge), vous avez de nombreuses raisons de traiter ce cas.

5
CommonsWare

Edit: Veuillez vous reporter à la réponse de CommonsWare

Ancienne réponse: Vous devez remplacer la méthode public int onStartCommand(Intent intent, int flags, int startId) et renvoyer la valeur START_STICKY en tant que mode de votre service.

cela permettra à votre service de continuer à fonctionner lorsque l'activité est détruite ou même lorsque vous quittez votre application, à moins d'appeler explicitement stopService(Intent)

0
Payam Hesami