Question

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

Pour ci-dessus tâche j'utilise l'objet statique qui se rappeler les valeurs autour de l'application et je ne ai pas besoin de faire quelque chose supplémentaire.

Mais je crains, si à propos du cycle de vie d'objet statique dans Android si Android a trouvé une faible mémoire supprimer des objets statiques ???

Android prend en charge le multi-tâche, si l'utilisateur passe à une autre application et lorsque l'utilisateur revient l'application commence à agir fou, objet statique ne supprimeront pas quand il effectuer plusieurs tâches ??? une idée ?? et suggère également tenir objet statique via la méthode singleton est une meilleure approche ???

Était-ce utile?

La solution

Commençons par un peu d'arrière-plan: Qu'est-ce qui se passe lorsque vous lancez une application
?     Le système d'exploitation lance un processus et lui attribue un identifiant de processus unique et affecte un processus de table.Système de processus démarre une instance de DVM (Dalvik VM); Chaque application fonctionne dans un DVM.
Un DVM gère le déchargement de chargement de classe, cycle de vie de l'instance, GC etc.

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

Donc, si vous créez une application Android et initialiser une variable statique, il reste dans la machine virtuelle Java jusqu'à ce que l'un des événements suivants se produise:
1. la classe est déchargée
2. la machine virtuelle Java arrête
3. le processus meurt

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

Vous pouvez le tester avec quelques lignes de code:

  1. imprimer la statique non initialisée dans onCreate de votre activité -> devrait imprimer null
  2. initialiser la statique. imprimer -> valeur serait non nulle
  3. Appuyez sur le bouton et passez à l'écran d'accueil. Remarque:. Écran d'accueil est une autre activité
  4. Lancez à nouveau votre activité -> la variable statique sera non nul
  5. Tuez votre processus d'application à partir DDMS (bouton d'arrêt dans la fenêtre des périphériques).
  6. Redémarrez votre activité -.> Statique aura une valeur nulle

L'espoir qui aide.

Autres conseils

Eh bien, le modèle Singleton est également basé sur l'utilisation de variables statiques afin que vous REELLEMENT dans la même position. Bien 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é prend au premier plan avant que votre application se déplace à son écran suivant, le processus de votre activité pourrait être tué et vous perdez les valeurs statiques. Cependant Android offre quelques options de valeurs qui persiste entre les Etats ou les transmettre tels que:

  • à l'aide d'une intention, vous pouvez transmettre vos critères de recherche de l'activité à activité (similaire à une web http demande)
  • à l'aide de préférences de l'application, vous pourrait enregistrer les valeurs et récupérer eux dans l'activité qui a besoin
  • en utilisant la base de données SQLite vous pouvez les persister dans une table et de récupérer les plus tard
  • si vous devez enregistrer simplement l'activité état de telle sorte que lors d'un redémarrage, les champs se rassasieront de leurs précédemment valeurs sélectionnées, vous pouvez mettre en œuvre l'activité de onSaveInstanceState () méthode - noter que ce n'est pas recommandé pour entre les activités persistence des Etats.

Vous pouvez obtenir des exemples de code de l'utilisation des préférences, les intentions et la base de données SQLite en regardant le Code source aegisshield arbre dans le code Google ou dans d'autres open source applications Android.

Après quelques recherches, il se révèle que l'utilisation de l'application pour stocker singletons est pas terrible d'une idée, à moins que vous êtes prêt à le recréer:

Ne pas stocker les données dans l'objet de l'application

réponse acceptée est techniquement correcte, il ne fournit pas toutes les informations.

Comme le lien ci-dessus suggère, si vous voulez vraiment coller avec ce modèle, vous devez être prêt à vérifier nul et recréer les données, si possible.

@ r1k0 est ici. Stockage de données dans les champs statiques d'une classe ne persisteront pas sur son across processus d'application tue et redémarre. Android tue systématiquement les processus en cours d'exécution (applications) quand il a besoin de mémoire.

Par la doc Android: état d'activité et d'éjection de la mémoire ,

  

Le système ne tue jamais une activité directement. , Il tue plutôt le   processus dans lequel l'activité va, détruire non seulement l'activité   mais tout le reste en cours d'exécution dans le processus, ainsi.

Vous pouvez sauvegarder et restaurer l'état des primitives et des objets sérializable et Parcelable en utilisant les méthodes ci-dessous. Ceux-ci sont appelés automatiquement au cours du cycle de vie de l'activité normale.

protected void onSaveInstanceState(Bundle state) {}
protected void onRestoreInstanceState(Bundle savedInstanceState){}

Donc, si vous avez une classe qui ne dispose que de variables statiques, vous pouvez enregistrer l'état de chaque champ dans onSaveInstanceState () et les restaurer dans onRestoreInstanceState (). Lorsque Android tue le processus que votre application est en cours d'exécution dans l'état de vos variables seront enregistrées, et quand Android restaure votre application, les valeurs seront restaurées en mémoire dans le même état qu'avant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top