2011-08-02 3 views
0

Je sais qu'il y a d'autres questions sur le même sujet, mais je n'ai pas trouvé de réponse à mes questions. Mon but est d'avoir un service qui fonctionne en tâche de fond en tant qu'écouteur d'emplacement, et il ne sera pas arrêté lorsque l'application est arrêtée (soit par un tueur de tâches).comment démarrer un service correctement et le maintenir en vie?

actuellement, je démarre le service avec startService (Intent) si le service n'est pas déjà démarré et lier à l'aide de bindService (Intent, ServiceConnection, 0).

maintenant, le premier problème est que mon application se bloque mais le service a démarré, et quand je lance à nouveau l'application cela fonctionne. Le deuxième problème, c'est que si je tue mon application en utilisant le tueur de tâches avancé, il tue mon service, bien que dans la page Service, il est dit que le service sera arrêté quand aucun client n'est parti et stopService() ou stopSelf() ont été appelés.

+0

Postez votre exception s'il vous plaît – Jack

+0

ok, j'ai découvert pourquoi il se bloque. – piojo

Répondre

0

Le service s'arrête lorsque l'application est fermée par le gestionnaire de tâches. Si cela ne pouvait pas être possible, chaque application aurait son propre service en cours d'exécution sans aucun contrôle de l'utilisateur sur eux. Vous pouvez démarrer le service au démarrage puis, lorsque l'utilisateur utilise le gestionnaire de tâches pour fermer, vous pouvez redémarrer le service.

+0

EDIT: C'est la méthode utilisée par Gmail, Yahoo, applications Twitter etc ... –

+0

mais quand je tue l'application, onDestroy n'est pas appelé – piojo

+0

Comment savez-vous onDestroy() n'est pas appelé? –

1

et il ne sera pas arrêté lorsque l'application est arrêtée (soit par un tueur de tâches).

Heureusement, cela n'est pas possible. Si votre utilisateur souhaite que votre service s'arrête, l'utilisateur peut arrêter le service via un tueur de tâches ou l'écran Gérer les services dans Paramètres. Actuellement, je démarre le service avec startService (Intent) si le service n'est pas déjà démarré et le lie en utilisant bindService (Intent, ServiceConnection, 0).

Habituellement, vous n'utilisez que l'un ou l'autre, pas les deux.

le deuxième problème, est que si je tue mon application à l'aide tueur de tâches avancé, il tue mon service aussi bien, bien que dans la page de service il est dit que le service sera arrêté lorsque aucun client bornées à gauche et si stopservice() ou stopSelf() ont été appelés. Non, car vous avez appelé startService() en plus de bindService().

+0

Eh bien, il semble que dans Android 2.2 cela fonctionne très bien.Le fait de tuer l'application qui a démarré le service n'a pas tué le service. Je suppose que c'est parce qu'à partir de l'API 5, onStartCommand est appelé et non onStart. BTW, Pourquoi mon SDK Android ne comprend pas les API 5 et 6? – piojo

Questions connexes