2012-06-22 4 views
3

Si une application est forcée d'arrêter en suivant les étapes Paramètres-> Application-> ManageApplications -> -> Forcer l'arrêt, Android appelle-t-on l'onDestroy de l'activité ou de l'application? (Si ce n'est pas le cas, existe-t-il un moyen de savoir si l'application est morte en raison d'un arrêt de la force déclenché par l'utilisateur).Android force Arrêtez le rappel à l'application?

+0

Mais qu'en est-il de l'application Protection de l'application? utilisent-ils un trou de sécurité pour devenir root? Parce que si vous forcez l'arrêt de l'application, il recommence, peu importe comment vous le tuez, il va recommencer. – David

Répondre

8

Force l'arrêt de l'application va tuer le processus entier (c'est-à-dire avec Process.killProcess(int pid)). Toutes les ressources associées à l'application seront supprimées et libérées par le noyau. Donc non, il n'y a aucun moyen que vous puissiez intercepter cette action. Lorsque vous lancez votre application sur le marché, la console de développeur vous fournira des statistiques concernant les fermetures de force, les plantages, etc. (si c'est ce que vous demandez).

+0

Merci pour votre réponse. – Chris

3

En résumé, non, onDestroy() n'est pas appelée, et vous ne pouvez pas le faire. Android ne le supporte pas.

Une réponse plus étendue ...

onDestroy() ne semble pas être appelé dans ce scénario. J'ai testé cela en essayant de l'avoir Toast moi avant d'appeler super.onDestroy, mais le message Toast ne s'est jamais présenté. (Et selon this post, onDestroy() est vraiment peu fiable et ne sera pas appelé souvent, voire pas du tout, sur les téléphones, alors qu'il peut être appelé sur un émulateur - alors soyez conscient de cela). Au lieu de cela, killProcess() est appelée, et nous ne pouvons pas intercepter cela.

En outre, selon la réponse acceptée dans this post, il semble que nous ne pouvons même pas attraper et effectuer des tâches après un arrêt de force commandé par l'utilisateur.

+0

Comme dans la plupart des cas, il n'y a aucune garantie que 'onDestroy()' sera appelé. –

+0

Exactement. C'est déjà indiqué dans ma réponse. – Mxyk

+0

Désolé, je ne suggérais pas que vous aviez tort ... Je voulais juste généraliser la réponse un peu ("comme dans la plupart des cas"). J'espère que ça ne vous dérange pas. :) –

0

Non. Ce n'est pas vraiment possible. Je n'ai pas regardé le code Android en question, mais j'imagine que "force stop" appelle simplement kill sur l'ID de processus de votre application. Donc, la seule façon d'intercepter cela est de pouvoir intercepter les signaux, ce que Android ne permet pas.

Si vous étiez enraciné, vous pouvez éventuellement le faire, mais pas de manière standard.

+0

La capacité à gérer les signaux serait un gros défaut de sécurité, à mon avis. : P –