73 votes

comprendre surTrimMemory (niveau int)

J'ai lu récemment cet article sur la Gestion de la Mémoire de Votre Application,je vous suggère fortement de le lire si vous êtes un AndroidDev et ne l'a jamais fait.

Il y a beaucoup de bonnes pratiques et une chose que je n'arrive jamais à connaître est la onTrimMemory(int niveau) méthode appelée par le système à chaque Activité/Fragment de notifier les événements sur lesquels la mémoire devrait ou pourrait être libéré.

Voici une citation de cet article:

Notez que votre application reçoit le onTrimMemory() rappel avec TRIM_MEMORY_UI_HIDDEN que lorsque tous les composants de l'INTERFACE utilisateur de votre application processus caché de l'utilisateur. Elle est distincte de la onStop() de callback qui est appelée lorsqu'une instance d'Activité devient caché, qui se produit même lorsque l'utilisateur se déplace vers une autre activité dans votre application. Ainsi, bien que vous devriez mettre en œuvre onStop() pour libérer de des ressources d'activité tels que la connexion à un réseau ou à annuler l'inscription récepteurs de radiodiffusion, il est préconisé de ne pas libérer vos ressources de l'INTERFACE utilisateur jusqu'à ce que vous recevez onTrimMemory(TRIM_MEMORY_UI_HIDDEN). Cela garantit que si l'utilisateur revient sur une autre activité dans votre application, votre INTERFACE utilisateur, les ressources sont encore disponibles pour reprendre l'activité rapidement.

Je suis vraiment intéressé à mettre en place une bonne gestion de la mémoire dans mon application, je suis impatient de mettre en œuvre la onTrimMemory() dans le droit chemin.

Je n'ai que quelques question à ce sujet:

  • est onTrimMemory(TRIM_MEMORY_UI_HIDDEN) appelée juste après le onStop()?

  • ce "communiqué de votre INTERFACE utilisateur des ressources" signifie dans ce contexte? juste pour exemple nettoyer le cache Bitmap, ou fait enlever et détruire tous les Afficher dans la Vue de l'arbre? j'ai l'habitude de détruire les points de Vue dans le onDestroy() ou onDestroyView() méthodes, je suis maintenant, vous vous demandez si je suis en train de faire.

  • est-il un Jumeau/correspondant de rappel à onTrimMemory(TRIM_MEMORY_UI_HIDDEN)? comme onCreate-onDestroy, onStart-onStop, onCreateView-onDestroyView. Je suis en demandant à comprendre où et comment je dois restaurer l'INTERFACE utilisateur de l'état après une Activité/Fragment a été introduit dans FG après onTrimMemory(TRIM_MEMORY_UI_HIDDEN) a été appelé.

39voto

alex.magalhaes Points 199
  • onTrimMemory avec TRIM_MEMORY_UI_HIDDEN niveau est en fait appelée avant onStop. Lorsque onStop est appelé, il signifie que l'activité est vraiment s'arrêter, et le système d'exploitation Android pourrait le tuer tout de suite si elle doit, de sorte que vous ne devriez pas attendre plus d'appels de l'activité des rappels aftet que, sauf pour les onRestart et parfois onDestroy.

  • "la libération de votre INTERFACE utilisateur des ressources" est en fait sur des choses comme les caches. Habituellement vous n'avez pas à vous soucier de la gestion des vues ou des composants de l'INTERFACE utilisateur, car le système d'exploitation déjà fait ça, et c'est pourquoi il y a tous ces rappels pour la création, le démarrage, l'interruption, l'arrêt et la destruction de l'activité. Cependant, parfois, pour améliorer les performances, vous devez augmenter l'utilisation de la mémoire, telles que la mise en cache certaines données utilisées par vos activités. C'est le type de ressource, vous devez libérer quand onTrimMemory est appelé, de sorte que votre application utilise moins de mémoire, même si elle affecte les performances. Vous devriez vous inquiéter des fuites de mémoire si. Si votre activité s'arrête, assurez-vous de ne pas garder toutes les références à son point de vue, parce que cela permettrait de maintenir l'activité de ces ordures, ce qui permettrait de garder l'ensemble du contexte de collecte et de mal, surtout si vous souhaitez conserver votre application en cours d'exécution pour des heures ou des jours (comme lorsque vous mettez en place des services).

  • Non, il n'y a pas de rappel correspondant à onTrimMemory. Cependant, vous ne devriez pas en avoir besoin. Comme je l'ai dit avant, si vous gardez un cache de certaines ressources pour améliorer les performances, tout simplement vide, et laisser pousser à nouveau, s'il en a besoin. Si le niveau de la mémoire garde basse, onTrimMemory peut être appelé de nouveau bientôt, avec le même niveau de mémoire. Par le chemin, gardez à l'esprit que onTrimMemory sera appelée avec plusieurs mémoires différents niveaux, et pas seulement TRIM_MEMORY_UI_HIDDEN.

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