21. TextView = 800 octets
Poids d’une structure sans les données
22. Layouts
• Coûts supplémentaires d’exécution
• La mise en page est coûteuse
– RelativeLayout
– android:layout_weight
• N’appelez pas requestLayout() souvent
35. Dessin d’une ListView
Layer hardware DisplayList Software
Temps en
0.009 2.1 10.3
ms
36. Opacité Position Taille Rotation Origine
alpha x scaleX rotation pivotX
y scaleY rotationX pivotY
translationX rotationY
translationY
Propriétés pour transformer les vues
37. Propriétés de transformation
• Ne changent pas la vue
• Changent comment elle se dessine
• Propices à de nombreuses optimisations
38. ViewRoot
ViewGroup DisplayList
View A View B Layer B DisplayList A
Optimisation des propriétés
39. ViewRoot
ViewGroup DisplayList
View A View B Layer B DisplayList A
setRotationY(45)
Optimisation des propriétés
40. ViewRoot
ViewGroup DisplayList
invalidate()
View A View B Layer B DisplayList A
setRotationY(45)
Optimisation des propriétés
41. ViewRoot
mark dirty
ViewGroup DisplayList
invalidate()
View A View B Layer B DisplayList A
setRotationY(45)
Optimisation des propriétés
42. ViewRoot
mark dirty
ViewGroup DisplayList
invalidate()
View A View B Layer B DisplayList A
setRotationY(45)
Optimisation des propriétés
43. Dure réalité
• Les layers ne sont pas gratuits
– Coût mémoire important
– Créer ou rafraîchir un layer prend du temps
• Utilisez les temporairement
– Vues complexes
– Pour la durée d’une animation
54. ou ne
ai t
o u r r u ve r d a n s
AP I p
tt e s se re t ro ro id
Ce i t p a e rs i o n d ’An d t
ou r ra pe u
p
utu re v e l le -même
un e f u r ra i t a se ra i t
o
ne p i s te r. M a is ç
qui s ex
êt r e pa
b ie n .
72. Très coûteux
• Créer un layer
– Allocation mémoire
– Rendu, surtout layers software
• Faites-le en avance
– View.buildLayer()
• Évitez les invalidate()
– Rafraîchit le layer
73. Peu coûteux
• Un layer se dessine VITE
• Effets visuels presque gratuits
– Fondu (opacité avec alpha)
– Filtres de couleurs
74. Coûteux
• Modifier une Paint souvent
• Modifier un Bitmap souvent
• Modifier un Path souvent
• Créer un nouvel objet encore plus coûteux
75. Gratuit
• Transformations
– Translation
– Rotation 2D et 3D
– Mise à l’échelle
• Filtrage de texture
– Paint.setFilterBitmap(true)
• Avec ou sans layer
76. Optimiser pour le GPU
• Redessiner seulement les parties utiles
– N’utiliez pas View.invalidate()
– Utilisez View.invalidate(l, t, r, b)
• Permet de traverser l’arbre de la UI
rapidement
77. Optimiser pour le GPU
• Groupez les primitives
– Pas bien : boucle de Canvas.drawLine()
– Bien : Canvas.drawLines()
• Évitez les changements d’état
– Minimisez les appels à save() restore()
78. Optimiser pour le GPU
• Groupez les commandes dans cet ordre
– Par type
– Par Paint
– Par Bitmap
83. Pour plus d’informations
• Google I|O 2011
– Android Accelerated Rendering
– http://youtu.be/v9S5EO7CLjo
• Parleys.com
– Various Devoxx talks for the past 4 years
• Android Developers
– http://d.android.com