2017-09-18 5 views
0

Si mon application affiche ListView et que ListViewItem contient peu d'informations, y compris des images, ces images sont-elles mises en cache? En d'autres termes, si mon ListView montre 1000 éléments et que chaque élément a une image dans une disposition comme ci-dessous et que cette image est située dans mes ressources/drawable, l'image sera chargée 1000 fois (et consommera donc 1000 x image_size of memory) ou sera-t-il mis en cache et chargé une seule fois pour toutes les 1000 images (et consommera donc seulement 1 x taille_image de la mémoire)?Mise en cache des images pouvant être mises en cache Android

+--------------------------------------------------+ 
|   |    TEXT      |    
| IMAGE |--------------------------------------| 
|   |    TEXT   | TEXT | 
+--------------------------------------------------+ 

Répondre

1

Si ma demande est montrant un ListView et le ListView a ListViewItem qui montre quelques pièces d'information, y compris les images, ces images sont mises en cache?

Chaque fois que vous chargez une image et de l'afficher dans un élément (l'élément doit être visible), il consommera 1 x image_size de mémoire, lorsque vous affichez 10 élément dans l'écran, il consommera 10 x image_size de mémoire, mais quand vous avez 1000 articles à afficher, c'est un autre cas. Si vous n'affichez que ces images et que vous n'utilisez aucune logique ImageLoader, cela fera beaucoup de mémoire et, par conséquent, si vous obtenez OOM.

Vous devez écrire votre propre logique ImageLoader, ou simplement utiliser des bibliothèques qui existent depuis un certain temps et qui sont presque parfaites. Par exemple, vous pouvez utiliser Picasso:

De nombreux pièges de chargement d'images sur Android sont automatiquement gérés par Picasso:

  • Handling recyclage ImageView et téléchargement dans un adaptateur cancelation.

  • Transformations d'image complexes avec un minimum d'utilisation de la mémoire.

  • Mémoire automatique et mise en cache de disque.

Comme il est un lib java, vous pouvez utiliser Binding Library pour l'utiliser dans Xamarin.

+0

Merci @YorkShen – pixel

+0

Vous pouvez également utiliser FFImageLoading conçu pour Xamarin. –