Est un androïde de service de garantie pour l'appeler onDestroy()?
Le diagramme de cycle de vie d'une Activité sur un appareil android ne garantit pas que onDestroy() sera appelée, mais que le processus peut être tué et l'Activité est retirée brusquement. Le cycle de vie diagramme d'un Service sur un android ne garantit que onDestroy() sera appelée. J'ai donc deux questions relatives à cette différence.
Tout d'abord, si le Service fait partie du même processus que celui de l'Activité, est le Service onDestroy() a appelé, bien que l'Activité onDestroy() n'est pas appelée? Je ne le crois pas, que "le meurtre d'un processus de" suggèrent que le système d'exploitation est l'arrêt de son fils et de la diffusion de ses ressources.
Et si c'est le cas, pouvez-Service uniquement-processus d'être brutalement tués par les OS?
Vous devez vous connecter pour publier un commentaire.
Je ne sais pas où vous avez vu qu'un Service est la garantie d'avoir
onDestroy()
appelé. Autant que je sache, ce n'est pas le cas. Si vous lisez cette page de la documentation, il décrit les conditions dans lesquelles un service pourrait être tué. Donc, si vous vous demandez si un processus qui héberge à la fois une activité de service et qui est tué, seraonDestroy()
être appelé sur le service (mais pas sur l'activité), alors la réponse est non; un serviceonDestroy()
ne sera pas nécessairement être appelé. Quant à savoir si un service uniquement le processus peut être brutalement tués par les OS: oui, c'est possible. Cela est particulièrement vrai lorsque vous avez beaucoup de travail à faire, et votreonStartCommand
appel que les files d'attente le travail à faire de façon asynchrone. Ensuite, le service va passer la majorité de son temps n'a pas protégéonCreate
,onStartCommand
ouonDestroy
méthodes.onDestroy
n'est pas appelée.Il y a deux choses à considérer:
onDestroy()
n'est pas appelé en tant que système d'exploitation Android va récupérer des ressources de toute façon (ce qui est une tâche de base de l'OS en général - dans le cas où vous ne savez pas que).onDestroy()
est appelé car c'est l'endroit où les développeurs peuvent libérer les ressources. Bien sûr, dans ce cas, l'application du processus reste intact (il y a peut-être d'autres Services/Activités en cours d'exécution en elle).Once neither of these situations hold
!=guaranteed
!=always
Once neither of these situations hold, the service's onDestroy() method is called
. Cela signifie encore que, même lorsque les deux situations maintenez le service ne sera pas seulement tué sansonDestroy
d'être appelé. Et, dans la pratique, ce qui arrive à être vrai.onDestory
être appelé"Service
est arrêté dans la voie normale (parstopSelf
par exemple). Il n'est pas toujours appelée lorsqueService
est tué (par le système)startForeground
) et, par conséquent, maintenu en vie par le système. Deuxième service est Service d'arrière-plan (bien commencé avecSTART_STICKY
). Système tue le deuxième service sans appelonDestroy
bien que le premier service est encore en vie. Les deux s'exécutent dans le même processus.onDestroy
est en effet pas garanti d'être appelé (comme décrit dans votre réponse - si le processus est tué).