mercredi 21 novembre 2007

Optimiser les performances de son applications (UI)

Un petit commentaire sur la façon de gérer la mémoire de votre application concernant l'interface utilisateur.

Si vous avez x écrans, vous aurez tendance à créer autant de layout que d'écran (rappelons qu'un Layout est une vue, utilisée pour l'affichage sur votre application Android): 1 layout pour consulter des informations, 1 layout pour créer ou éditer une information...Vous passerez d'une vue à l'autre en utilisant la méthode setContentView(Layout d).

Cette méthode peut être utilisée mais "allégée" notamment pour la gestion de la mémoire. Pour simplifier les choses, vous pouvez utiliser qu'un seul layout dans lequel vous créer autant de vue (View ou autre Layout) en fonction du nombre de vue à afficher dans votre application. Et plutôt que d'appeler le setContentView, qui ne détruit pas les objets présent dans la vue précédente, vous n'appelez que la vue devant s'afficher à l'intérieur du layout.

Cette manière permet d'éviter de conserver en mémoire, tant que le garbage collector n'est pas encore passé, tous les objets présents dans les vues.

2 commentaires:

Anonyme a dit…

Bonjour,

serait-il possible d'illustrer de manière concrète par un exemple cette méthode d'optimisation (code + fichiers xml).

Vous dites : Cette manière permet d'éviter de conserver en mémoire, tant que le garbage collector n'est pas encore passé, tous les objets présents dans les vues.
J'ai un peu de mal à comprendre cette assertion. Comment les objets sont-ils supprimés de la mémoire si le GC n'est pas encore passé ?

Merci.

Unknown a dit…

D'après ce que j'ai pu avoir comme information:
- lorsque l'on fait un setContentView(Layout) tous les objets présents à l'intérieur sont instanciés et initialisés.
- si on change de Layout par autre setContentViw(Layout newLayout), le premier layout n'est pas détruit directement, il est placé en mémoire comme étant potentiellement destructible par le GC
- un exemple: créer un layout (fichier xml) dans lequel vous placez x LinearLayout. Grace à la propriété setVisible (ou setVisibility) avec les paramètres View.VISIBLE, View.INVISIBLE et View.GONE vous afficher ou cacher tout ou partie des LinearLayout que vous appeler dans une classe pour cacher ou visualiser les LinearLayout du layout principale.

Ceci evite d'appeler des setViewContent dès lors que vous souhaitez changer de vue.

Je préparerais un exemple (xml/class) à ce sujet.