Pour l'application sur laquelle je travaille actuellement, j'ai créé quelque chose comme ImageSwitcher
pour plusieurs images (imaginez le UIScrollView
de l'iPhone avec la pagination activée). Au début, j'ai codé en dur quelques ImageViews
et chargé leurs ressources drawables sur la création/inflation, mais après quelques réglages (et ce que je pensais être des améliorations), j'ai réduit les vues nécessaires à 3, dont ImageViews
utilisé pour affichage de la page en cours et animation entre la page actuelle et la nouvelle page.Optimisation de la pagination entre ImageViews dans Android?
Avec ce changement, j'ai commencé à utiliser setImageResource
/setImageDrawable
pour le chargement dynamique de la nouvelle image dans mon 2 ImageViews
avant de glisser à travers les pages (je suis en utilisant des fichiers PNG, de taille pour les écrans HVGA). À ma grande déception, la performance a empiré, au point de ressentir un certain décalage en glissant plus vite dans les pages. Un rapide coup d'œil dans TraceView
a révélé que 17,4% du temps total pendant l'utilisation de l'application, plus de 5 fois plus que la méthode lourde suivante, a été consommé à partir de BitmapFactory.nativeDecodeAsset
, appelé par mon paramètre dynamique de ressource drawable.
Je pense à des façons de contourner cela, et je veux le faire de la meilleure façon possible, donc toutes les suggestions sont les bienvenues.
Il semble que vous ayez réinventé ImageSwitcher. ImageSwitcher fait exactement cela: 2 ImageViews utilisés pour afficher l'image actuelle et l'image suivante. Contrairement à ce que cela peut paraître, il n'est pas seulement utilisé pour basculer entre les deux mêmes images, comme il pourrait sembler au départ. Je l'utilise souvent pour animer tout un flux d'images (et utiliser un autre mélangeur pour animer et sortir les titres). Je ne sais pas si cela va résoudre vos problèmes de performance, mais au moins, cela pourrait prendre en compte certaines choses. – lilbyrdie
Merci pour la suggestion. J'ai dû réinventer ImageSwitcher pour plusieurs raisons - d'abord parce que j'ai commencé avec plusieurs images, puis les ai réduites à la vue courante et à la vue auxiliaire, parce que je voulais contrôler un autre composant TextView, qui devrait être facilement accessible à partir de l'ImageViews - Je pensais que je vais aplatir la hiérarchie et utiliser ma vue de sélecteur personnalisé, ce qui ne fera que ce que je veux qu'il fasse. En fin de compte, après avoir joué avec AllocationTracker et TraceView, je ne pense pas que le problème soit dans le ViewGroup personnalisé. –