Service Android tué
J'ai un Service s'exécutant dans le même processus que mon Application.
Parfois, le système d'exploitation Android décide de tuer mon service (sans doute en raison de la faible mémoire).
Ma question est: est-ce que mon Application a été tué avec le Service? ou comment ça fonctionne exactement?
Merci!
source d'informationauteur Erdal
Vous devez vous connecter pour publier un commentaire.
Abord, assurez-vous de lire: http://developer.android.com/guide/components/processes-and-threads.html#Lifecycle
La clé, c'est que sur Android, un processus est juste un conteneur pour le code, ou plus précisément un ou plusieurs composants (les activités, les services, les récepteurs, les fournisseurs). Par défaut, tous les composants dans un .apk obtenir leur propre, processus dédié, ce qu'ils exécutent tous ensemble. C'est presque toujours ce que vous voulez.
Lorsque l'utilisateur est en interaction directe avec un composant de ce processus (qui est une activité) Android va essayer très dur pour garder que le processus en cours d'exécution, et vous ne le verrez pas tués, sauf dans des circonstances extraordinaires.
Lorsque l'utilisateur n'est plus directement en interaction avec le processus, puis il devient insignifiant par rapport à d'autres procédés décrits dans les documents référencés. C'est, vide de processus (pas de composants intéressants) sera tué avant le processus de la tenue des activités que l'utilisateur avait été l'aide, qui sera tué avant des processus avec les services en cours d'exécution. Afin d'avoir un service en cours d'exécution aura tendance à garder vos processus au détriment des autres processus.
Dans le même temps, nous devons faire face à de plus en plus d'applications en laissant des services en cours d'exécution, souvent indéfiniment, et souvent avec des fuites de mémoire. Donc a un service s'exécute de plus en plus longtemps, Android va essayer de moins en moins difficile de garder son processus en cours. Effectivement, cela signifie en le déplaçant vers le fond du seau jusqu'à ce que la mémoire de tueur qu'il faut. Après, si le service se veut l'exécuter, puis un nouveau processus sera créé pour être redémarré.
Le résultat est que, pour les services habituels de l'exécution d'un long moment, c'est le comportement attendu que leur processus est tué après un certain temps. Ce n'est pas nécessaire d'arrêter le service; un service qui veut continuer à exécuter, il aura juste besoin d'être instancié dans un nouveau processus.
Bien sûr, aussi longtemps que l'utilisateur interagit avec une activité dans votre processus, le processus ne sera pas tué, car cela tire à l'avant-plan de la catégorie indépendamment de ce qui se passe avec tous les services.
Processus sont tués par la faible mémoire du tueur, et non des Applications. Donc à moins de faire du travail supplémentaire pour obtenir le fonctionnement de votre Service dans un processus différent, puis vos Activités sont tués avec vos Services.
La faible mémoire killer ne pas essayer de détruire tous les objets dans votre processus, bien que le gestionnaire d'activité peut appeler onDestroy sur l'Activité des objets qui ne sont plus nécessaires. Mais ce qui se passe dans le cadre de l'activité ordinaire du cycle de vie, n'est pas due à une insuffisance de mémoire.
(En passant, je suis pas clair si tu veux dire par "demande" en général, ou de votre objet qui étend le champ d'Application, ou si vous voulez dire à vos Activités qui montrent l'INTERFACE utilisateur.)
Une application est quelque chose qui a une interface utilisateur et si vous avez inclus un service de pair avec elle, alors certainement, il sera tué, puisque les Applications sont fin une fois que la mise en cache de l'application de la file d'attente est pleine
afin de créer un Service distinct de l'application ou en d'autres termes de créer un autre projet pour elle 🙂
btw, je ne suis pas un développeur Android expérimenté, mais c'est je pense ce que j'ai appris en regardant le développement Android cycle de vie de vidéos par Google