Je crée une application de recherche d'événement, nous définissons des critères de recherche à partir d'un écran, remplissons un autre écran, puis l'utilisateur peut modifier les critères de recherche à partir du 3ème écran et passe au 4ème écran.
Pour accomplir la tâche ci-dessus, j'utilise un objet statique qui se souvient des valeurs autour de l'application et je n'ai rien de plus à faire.
Mais j'ai peur si sur le cycle de vie des objets statiques dans Android, si la mémoire est faible, Android supprime les objets statiques ???
Comme Android prend en charge le multitâche, si l'utilisateur passe à une autre application et lorsque l'utilisateur revient, l'application commence à agir de manière folle, l'objet statique est-il supprimé lorsqu'il effectue plusieurs tâches ??? une idée ?? et suggèrent également de maintenir un objet statique via la méthode singleton est une meilleure approche ???
Eh bien, le modèle Singleton est également basé sur l'utilisation de variables statiques, donc vous seriez 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é passe au premier plan avant que votre application ne passe à son écran suivant, le processus de votre activité puisse être interrompu et vous perdez les valeurs statiques. Cependant, Android propose quelques options de valeurs persistantes entre les états ou de les transmettre telles que:
Vous pouvez obtenir des exemples de code de l'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 Android open source.
la source
Après quelques recherches, il s'avère que l'utilisation d'Application pour stocker des singletons n'est pas une bonne idée, à moins que vous ne soyez prêt à la recréer:
Ne stockez pas de données dans l'objet d'application
ainsi, bien que la réponse acceptée soit techniquement correcte, elle ne fournit pas toutes les informations.
Comme le lien ci-dessus le suggère, si vous voulez vraiment vous en tenir à ce modèle, vous devez être prêt à vérifier la valeur nulle et à recréer les données, si possible.
la source
@ r1k0 est ici. Le stockage des données dans les champs statiques d'une classe ne persistera pas de lui-même pendant les arrêts et redémarrages du processus d'application. Android tue régulièrement les processus (exécutant des applications) lorsqu'il a besoin de mémoire.
Selon la doc Android: état d'activité et éjection de la mémoire ,
Vous pouvez enregistrer et restaurer l'état des primitives ainsi que des objets sérialisables et parcellables à l'aide des méthodes ci-dessous. Ceux-ci sont automatiquement appelés pendant le cycle de vie normal de l'activité.
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 arrête 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ées en mémoire dans le même état qu'auparavant.
la source