J’avais déjà donné une astuce lors d’un précédent article expliquant la nécessité de minimiser l’utilisation des vues. Cela permet d’une part de minimiser la mémoire consommée et de sauver du temps CPU lors de la passe de mesure par exemple. Les lecteurs auront probablement remarqué que l’article était plus rédigé sous forme de “à faire/à ne pas faire” plutôt que sous forme “d’astuce”.

Pour résumer succinctement, la conclusion de l’astuce de mon précédent article était : “Réfléchissez à ce que vous faites, ne faites pas de choses inutiles”. L’objectif était bien sûr de vous faire comprendre les problèmes engendrés par l’utilisation abusives de vues. J’espère sincèrement qu’à la lecture de l’astuce #1 vous avez réétudié l’ensemble de vos interfaces et que le nombre de View et de ViewGroup utilisés a été revu à la baisse. Maintenant que vous maitrisez tous le sujet, je pense qu’il est temps de vous faire part d’une nouvelle astuce qui vous permettra d’optimiser votre hiérarchie de vues (ou plus précisément de vérifier la minimalité de l’arbre des vues) : l’outil layoutopt.

L’outil layoutopt est disponible dans le SDK Android (sous le dossier tools) et s’utilise très simplement :

layoutopt 

Prenons l’example d’un fichier XML non minimal tel que le suivant (fichier nommé bad.xml) :

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
	xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_width="fill_parent"
	android:layout_height="fill_parent">
 
	<RelativeLayout
		android:layout_width="fill_parent"
		android:layout_height="fill_parent"
		android:gravity="center">
 
		<TextView
			android:layout_width="wrap_content"
			android:layout_height="wrap_content"
			android:text="Minimisez l'utilisation des vues !" />
 
	</RelativeLayout>
 
</FrameLayout>

En utilisant un peu nos méninges, on se rend facilement compte que le FrameLayout est inutile. L’arbre optimal devrait normalement être de la forme suivante (fichier nommé good.xml) :

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
	xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_width="fill_parent"
	android:layout_height="fill_parent"
	android:gravity="center">
 
		<TextView
			android:layout_width="wrap_content"
			android:layout_height="wrap_content"
			android:text="Minimisez l'utilisation des vues !" />
 
</RelativeLayout>

L’utilisation de layoutopt sur les deux fichiers précédents affiche la sortie suivante :

MacBook-Pro-de-Cyril-Mottier:tools cyrilmottier$ ./layoutopt /Users/cyrilmottier/Desktop/testfolder/
/Users/cyrilmottier/Desktop/testfolder/bad.xml
	5:20 The root-level <FrameLayout/> can be replaced with <merge/>
	10:18 This RelativeLayout layout or its FrameLayout parent is useless
/Users/cyrilmottier/Desktop/testfolder/good.xml

La sortie donnée par layoutopt sur bad.xml est assez explicite et mentionne que FrameLayout ou RelativeLayout est inutile. Le fichier good.xml est considéré comme minimal. Super non? Vous pensez maintenant que vos méninges sont inutiles? Malheureusement non … Android a beau fournir de superbes outils, il ne peut pas réfléchir pour vous. Si le seul et unique but de votre UI est d’afficher un texte au centre de l’écran, il est encore possible de minimiser l’interface précédente (fichier really_good.xml) :

<?xml version="1.0" encoding="utf-8"?>
<TextView
	xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_width="fill_parent"
	android:layout_height="fill_parent"
	android:gravity="center"
	android:text="Minimisez l'utilisation des vues !" />

A vous de jouer. Minimisez bien !

Trackback

4 commentaires jusqu'à maintenant

  1. J’avais directement pensé à la dernière méthode ;)

  2. @Pierre : Si c’est le cas, c’est que tu réfléchis à ton UI :p. Je suis heureux de voir que mon travail porte ses fruits !

  3. @Pierre : Si le but était uniquement d’afficher un texte centré au milieu de la page, effectivement, la dernière solution était assez évidente, néanmoins dans des cas plus complexe, on peut parfois créer des vues inutiles, ou lors de refactoring successifs.
    Ce petit outil “layoutopt” est une perle, à lancer de temps suite à la création d’un écran complexe afin de le valider, ou suite à des changements majeurs dans l’UI.
    Merci Cyril !

  4. [...] Minimiser le nombre de vue/layouts de vos UI [...]

Ajoutez votre commentaire maintenant