Optimiser une vue personnalisée

Lorsque vous disposez d'une vue bien conçue qui répond aux gestes et aux transitions entre les états, assurez-vous qu'elle s'exécute rapidement. Pour éviter que l'interface utilisateur soit lente ou saccadée pendant la lecture, assurez-vous que les animations s'exécutent de manière cohérente à 60 images par seconde.

Accélérer la vue

Pour accélérer l'affichage, éliminez le code inutile des routines appelées fréquemment. Commencez par onDraw(), qui vous offre le meilleur retour sur investissement. En particulier, éliminez les allocations dans onDraw(), car elles peuvent entraîner une récupération de mémoire entraînant un stuttering. Allouez des objets pendant l'initialisation ou entre les animations. N'effectuez jamais d'allocation pendant l'exécution d'une animation.

En plus de réduire la taille de onDraw(), veillez à ce qu'il soit appelé le moins souvent possible. La plupart des appels à onDraw() sont le résultat d'un appel à invalidate(). Par conséquent, éliminez les appels inutiles à invalidate().

Une autre opération très coûteuse consiste à balayer les mises en page. Lorsqu'une vue appelle requestLayout(), le système d'interface utilisateur Android parcourt l'ensemble de la hiérarchie des vues pour déterminer la taille nécessaire de chaque vue. S'il détecte des mesures contradictoires, il peut traverser la hiérarchie plusieurs fois. Les concepteurs UI créent parfois des hiérarchies profondes d'objets ViewGroup imbriqués. Ces hiérarchies de vues profondes entraînent des problèmes de performances. Par conséquent, définissez des hiérarchies de vues aussi superficielles que possible.

Si votre UI est complexe, envisagez d'écrire une ViewGroup personnalisée pour effectuer sa mise en page. Contrairement aux vues intégrées, votre vue personnalisée peut faire des hypothèses spécifiques à l'application concernant la taille et la forme de ses enfants, et donc éviter de traverser ses enfants pour calculer des mesures.

Par exemple, si vous disposez d'un élément ViwGroup personnalisé qui n'ajuste pas sa propre taille pour s'adapter à toutes ses vues enfants, vous évitez les frais généraux liés à la mesure de toutes les vues enfants. Cette optimisation n'est pas possible si vous utilisez les mises en page intégrées qui répondent à un large éventail de cas d'utilisation.