Je crée une application de recherche d'événements, nous définissons des critères de recherche à partir d'un écran, remplissez un autre écran, puis l'utilisateur peut modifier les critères de recherche à partir du 3ème écran et aller au 4ème écran.
Pour réaliser la tâche ci-dessus, j'utilise un objet statique qui se souvient des valeurs autour de l'application et je n'ai rien à faire de plus.
Mais j'ai peur si à propos du cycle de vie des objets statiques dans Android si la mémoire est faible Android supprimer les objets statiques ???
Comme Android prend en charge le multitâche, si l'utilisateur bascule vers une autre application et lorsque l'utilisateur revient, l'application devient folle, l'objet statique est-il supprimé lorsqu'il effectue plusieurs tâches ??? n'importe quelle idée ?? et suggère également tenir un objet statique via la méthode singleton est une meilleure approche ???
Commençons par un peu de contexte: que se passe-t-il lorsque vous démarrez une application?
Le système d'exploitation démarre un processus et lui attribue un identifiant de processus unique et alloue une table de processus. Un processus démarre une instance de DVM (Dalvik VM); Chaque application s'exécute à l'intérieur d'un DVM.
Un DVM gère le déchargement du chargement des classes, le cycle de vie des instances, le GC, etc.
Durée de vie d'une variable statique: une variable statique prend naissance lorsqu'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 initialisez une variable statique, elle restera dans la JVM jusqu'à ce que l'un des événements suivants se produise:
1. la classe est déchargée
2. la JVM s'arrête
3. le processus meurt
Notez que la valeur de la variable statique persistera lorsque vous basculerez vers une activité différente d'une autre application et qu'aucune des trois précédentes ne se produit. Si l'un des trois facteurs ci-dessus se produit, le statique perdra sa valeur.
Vous pouvez tester cela avec quelques lignes de code:
J'espère que ça t'as aidé.
Eh bien, le modèle Singleton est également basé sur l'utilisation de variables statiques, donc vous seriez en fait dans la même position. Bien que l'approche statique puisse fonctionner la plupart du temps, il peut arriver que dans certains cas, lorsque la mémoire est pleine et qu'une autre activité occupe le premier plan avant que votre application ne passe à son écran suivant, le processus de votre activité peut être interrompu et vous perdez les valeurs statiques. Cependant, Android offre quelques options de persistance de valeurs entre états ou de leur transmission, telles que:
Vous pouvez obtenir des exemples de code d'utilisation des préférences, des intentions et de la base de données sqlite en consultant l'arborescence du code source Aegis-shield dans le code Google ou dans d'autres applications open source Android .
@ r1k0 est ici. Le stockage de données dans des champs statiques d'une classe ne persistera pas de lui-même à travers le processus d'application tue et redémarre. Android tue régulièrement les processus (exécutant des applications) lorsqu'il a besoin de mémoire.
Par le Android doc: état d'activité et éjection de la mémoire ,
Le système ne tue jamais directement une activité. Au lieu de cela, il tue le processus dans lequel l'activité s'exécute, détruisant non seulement l'activité mais aussi tout le reste en cours d'exécution dans le processus.
Vous pouvez enregistrer et restaurer l'état des primitives ainsi que des objets sérialisables et parcellables en utilisant les méthodes ci-dessous. Ceux-ci sont automatiquement appelés pendant le cycle de vie normal des activités.
protected void onSaveInstanceState(Bundle state) {}
protected void onRestoreInstanceState(Bundle savedInstanceState){}
Donc, si vous avez une classe qui n'a que des variables statiques, vous pouvez enregistrer l'état de chaque champ dans onSaveInstanceState () et les restaurer dans onRestoreInstanceState (). Lorsque Android tue le processus dans lequel votre application s'exécute, l'état de vos variables sera enregistré et lorsque Android restaure votre application, les valeurs seront restauré en mémoire dans le même état que précédemment.