Android détruire activités, tuer les processus

Salut, je me demandais comment Android est la gestion de la mémoire et je ne trouve pas de réponse précise à n'importe où.
Supposons que j'ai une application avec 5 activités sur l'activité actuelle de la pile (à 4 sont arrêtés et 1 suite), il n'y a pas de service connecté. Je presse le bouton de la MAISON de sorte que l'ensemble de mes activités sont à l'arrêt.
Je commence quelques autres la consommation de mémoire de l'application et de l'ensemble de la mémoire de l'appareil commence à être faible. Et la question est de

... Ce qui va arriver à mon application?

  1. Système peut détruire un seul ou de quelques uns de mes activités de récupérer de la mémoire?
  2. Sera le système de tuer l'ensemble du processus de demande? Sera toutes les activités soient bien détruit?
  3. Ce qui va se passer quand je serai de retour à ma demande quand il a été totalement tué? Il commence à partir de début (comme la première) ou va essayer de récupérer les activités de previeous état /si oui: est - il seulement celui sur le haut de la pile ou de la totalité d'entre eux?

Mise à JOUR:

Avant de poser cette question, j'ai vu l'Activité du cycle de vie quelques fois, mais il n'a pas de réponses à mes questions.
J'ai fait quelques tests et j'ai quelques réponses. "Arrêter le processus" DDMS était un indice pour le test.

Je n'ai pas testé réponse à la question 1, mais en tant que guide dit:

Si une activité est en pause ou à l'arrêt, le système peut déplacer de l'activité
de la mémoire en soit, il demande à la fin, ou tout simplement le meurtre de son
processus.

Il semble que l'un ou plusieurs de ces activités peuvent être détruits doucement(avec la méthode onDestroy) sans tuer le processus. Vous obtiendrez simplement onCreate + bundle) lors de l'obtention de retour.

Réponse Question 2:

OUI. Généralement, le système tue l'ensemble du processus, cela signifie que toutes les données y compris les activités et les champs statiques sont détruits. Ce n'est PAS fait bien de ne pas obtenir de onDestroy ou finialize() pour toute de votre pause/arrêt des activités. C'est pourquoi saveInstanceState() est appelée juste avant la méthode onPause. onPause est fondamentalement la dernière méthode où vous devez sauver quelque chose, car après cette méthode, vous ne pourrait jamais voir onStop ou onDestroy. Le système peut-il suffit de tuer le processus de la destruction de tous vos objets quelle que soit leur fonction et ce qu'ils font.

Question 3 réponse:

Ce qui va se passer lorsque vous serez de retour pour un tué application?

  • Avant Android 2.2 - l'application va commencer à partir du début, avec lanceur d'activité.
  • À partir de 2.2 - système permettra de restaurer la version précédente, l'état de l'application. Ça veut dire quoi? Cela signifie que la dernière activité visible sera recréé (onCreate + bundle). Ce qui va se passer avec l'activité de la pile? La pile est bien, mais toutes les activités sont morts. Chacun d'eux sera recréé (onCreate + bundle) lorsque vous êtes de retour à elle avec bouton de retour.
    Il y a une chose de plus à ce sujet:

Normalement, le système efface une tâche (supprime toutes les activités de l'
pile au-dessus de la racine de l'activité) dans certaines situations, lorsque l'utilisateur
re-sélectionne que des tâches de l'écran d'accueil. Généralement, cela se fait si
l'utilisateur n'a pas visité la tâche pour un certain laps de temps, comme
30 minutes.

Conclusion?

  1. Ne pense pas que l'activité de gestion de la rotation des problèmes peuvent être résolus
    par android:configChanges="orientation". Lorsque vous faites cela, vous ne
    obtenir de nombreux autres problèmes que vous n'êtes même pas conscient.
  2. Tester votre application avec DDMS - Stop bouton traiter. Voir Ce
  3. Être prudent lors de l'utilisation de variables statiques. Ne pense pas que lorsque vous avez initialisé dans l'activité 1 - vous avez initialisé dans l'activité 2. Le seul endroit sûr pour initialiser mondiale de la statique serait la classe d'Application.
  4. N'oubliez pas que vous pouvez ne jamais voir onStop ou onDestroy. Fermez les fichiers/bases de données, arrêt de téléchargeurs dans onPause. Lorsque vous voulez application pour faire quelque chose dans BG - utilisation de premier plan de Services.

Ce serait elle ... j'Espère que j'ai aidé avec mon essey 🙂

  • Pour que votre hypothèse, sont ces 5 activités à partir d'une même application ou plusieurs applications différentes?
  • "J'ai une application avec 5 activités sur l'activité actuelle de la pile" bien sûr, ils sont tous de ma, l'un, le même processus de demande.
  • Merci c'est exactement ma question trop... Votre question et les réponses m'ont aidé un peu.
  • Voir aussi: stackoverflow.com/q/11365301/1402846, stackoverflow.com/q/5423571/1402846
  • Ce problème est résolu maintenant? Comment, si elle est?
  • Ce n'était pas un problème mais une question. La réponse est fournie ci-dessous ma question dans ma mise à JOUR. Il est basé sur mes tests et l'exploration en profondeur 🙂
  • Oui, il semble que le système peut terminer le processus complètement ou juste la fin d'une activité
  • Pouvez-vous dire, ce que vous entendez par la racine de l'activité? en haut de la pile ou de lanceur?
  • oui, c'est l'Activité a commencé par l'icône de lancement. Le texte avec de la racine de l'activité " a été prise à partir d'android docs
  • Je rencontre un problème lors de la récupération des variables statiques dans cette situation exacte. Quand vous dites "Le seul endroit sûr pour initialiser mondiale de la statique serait la classe d'Application" que voulez-vous dire par "la classe d'Application"?
  • Cela devrait être accepté question ;0

InformationsquelleAutor Mark | 2013-01-17