99 votes

Cycle de vie d'objet statique Android (Application act crazy)

Je suis en création d'événements de l'application de recherche, nous avons défini des critères de recherche à partir d'un écran remplir dans un autre écran, alors l'utilisateur peut modifier les critères de recherche à partir de la 3ème écran et va à la 4ème écran.

Pour atteindre au-dessus de tâche que je suis en utilisant un objet statique qui rappelle les valeurs autour de l'application et je n'ai pas besoin de faire quelque chose d'extra.

Mais j'ai peur, si sur un objet statique du cycle de vie dans android si peu de mémoire trouvé android supprimer des objets statiques ???

Android prend en charge multi-tâches, si l'utilisateur passe à une autre application et lorsque l'utilisateur s'agit d'une demande de commencer à faire les folles, ne statique de l'objet supprimé quand il multi tâche ??? une idée ?? et aussi suggérer la tenue statique de l'objet via singleton méthode est la meilleure approche ???

235voto

Samuh Points 16564

Permet de commencer avec un peu de fond: Ce qui se passe lorsque vous démarrez une application?
Le système d'exploitation démarre un processus et lui attribue un id de processus unique et alloue un tableau du processus.Un processus de démarrage d'une instance de DVM(Dalvik VM); Chaque application s'exécute à l'intérieur d'un docteur vétérinaire.
Un DVM gère classe de chargement de déchargement, à l'exemple du cycle de vie, GC etc.

Durée de vie d'une variable statique: Une variable statique vient à l'existence quand une classe est chargée par la JVM et meurt lorsque la classe est déchargée.

Donc, si vous créez une application android et initialiser une variable statique, il restera dans la JVM jusqu'à ce qu'un des événements suivants se produit:
1. la classe est déchargée
2. la machine s'arrête
3. le processus meurt

Notez que la valeur de la variable statique persiste lorsque vous passez à une autre activité d'une autre application et aucun des trois ci-dessus se produit. Si l'une des trois se passer la statique perdra de sa valeur.

Vous pouvez le tester avec quelques lignes de code:

  1. imprimer la statique non-initialisée dans le onCreate de votre activité -> doit imprimer null
  2. initialisation de la statique. imprimer -> valeur non null
  3. Frapper le bouton de retour et aller à l'écran d'accueil. Remarque: l'écran d'Accueil est une autre activité.
  4. Lancer votre activité nouveau -> la variable statique sera non-null
  5. Tuer votre processus de demande de DDMS(bouton d'arrêt dans la fenêtre périphériques).
  6. Redémarrez votre activité -> la statique aura la valeur null.

Espérons que cela aide.

16voto

r1k0 Points 796

Eh bien, le pattern Singleton est également basée sur l'utilisation de variables statiques donc, en fait, vous seriez dans la même position. Alors que l'approche statique peut travailler la plupart du temps, il peut arriver que, dans certains cas, lorsque la mémoire est pleine et une autre activité qui prend le premier plan avant que votre demande se déplace vers son écran suivant, votre activité du processus pourraient être tués, et vous perdez les valeurs statiques. Cependant Android offre quelques options de la persistance de valeurs entre les états ou les transmettre, telles que:

  • à l'aide d'une Intention, vous pourriez passer le long de vos critères de recherche à partir de l'activité de activité (similaire à un web http demande)
  • à l'aide des préférences de l'application, vous pourrait sauver les valeurs et les récupérer dans l'activité qui a besoin d'eux
  • à l'aide de la base de données sqlite, vous pouvez les conserver dans un tableau et récupérer plus tard
  • si vous avez besoin simplement enregistrer l'activité l'état de sorte que lors du redémarrage, le champs se remplir avec leurs les valeurs sélectionnées, vous pouvez mettre en œuvre le onSaveInstanceState() de l'activité la méthode de noter que ce n'est pas recommandé pour entre les activités la persistance de l'état.

Vous pouvez obtenir des exemples de code d'usage en matière de préférences, d'intentions et de la base de données sqlite en regardant l' égide bouclier arborescence du code source en code google ou dans d'autres open source applications Android.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X