Vous êtes développeur Android ? S’il y a un autre blog que l’Android Developers Blog à suivre c’est bien celui de Cyril Mottier. Et pas seulement parce qu’il est français ! D’ailleurs son blog l’est de moins en moins… 😉 Mais parce qu’il produit des articles de qualité sur les IHM des applications Android. C’est le genre de personne qui s’arrête sur des détails. Des détails qui permettent de faire la différence :

  • amélioration de l’ergonomie
  • affichage le plus rapide de l’IHM

Tout ceci afin de servir un seul et même objectif : proposer la meilleure expérience utilisateur.

Dernièrement, Cyril a donné une conférence sur les Performance Android au Paug. Si vous n’êtes pas parisien ou si vous n’avez pas pu vous y rendre, son intervention vidéo et les slides sont disponibles en ligne. Sa présentation est vraiment intéressante.

Si vous vous intéressez au sujet, il énonce quelques bonnes pratiques assez classiques. Néanmoins, je dois avouer que j’ai découvert l’utilisation des CharArrayBuffer dans les Cursor, l’événement fling ainsi que la mise en cache de soit-disant insignifiants tableaux d’objets créés dans des portions de coche fortement sollicitées.

Je me suis donc empressé de mettre en pratique deux de ces conseils dans la dernière version Forum Pocket. Le résultat est assez convainquant. Notez que même si la présentation est tournée autour de l’IHM, les bonnes pratiques sont applicables sur n’importe quelle partie du code. Par exemple, sur Forum Pocket, deux composants bénéficient maintenant de ces optimisations :

  • Les écrans avec des listes : utilisent les CharArrayBuffer (sauf pour les dates et les data des WebView :-/).
  • La base de données interne : met en cache tous les tableaux nécessaires à son fonctionnement et le ContentProvider a été réécrit pour ne plus avoir besoin d’allouer des objets temporaires.

D’un coté, le défilement des listes est plus rapide. L’effet positif est directement visible pour l’utilisateur. De l’autre, l’enregistrement et la recherche de données est nettement plus rapide mais ces traitements en tâche de fond ne sont pas forcément perceptibles par l’utilisateur. Même si au final, l’IHM se met à jour plus rapidement qu’avant. 😉

Il faudrait maintenant que je trouve comment aller jusqu’au bout de la démarche :

  • en utilisant les CharArrayBuffer pour les WebView et le formatage de Date
  • en tirant parti du fling pour ne pas charger les images des avatars, voir pour ne par charger les WebView

Alors bon visionnage et à vos optimisations !