Dans mon application Android, j'ai une liste de réception contenant 30 lignes, et chaque ligne consiste en plusieurs visites textuelles de laquelle on est spanhable et contient parfois beaucoup de texte et d'images formatées. P>
Ces images sont chargées à partir du web asynchrone: un espace réservé est affiché jusqu'à ce que l'image ait été téléchargée puis remplacée par l'image. P>
Malheureusement, les lignes de la liste de liste sont chargées lorsque je fais défiler sur eux. Cela rend le tout très lent. De plus, ces images sont chargées à partir du Web à nouveau à nouveau, chaque fois que je fais défiler sur la ligne. p>
Comment puis-je éteindre, que les lignes de vision de liste sont chargées lorsque je les faire défiler sur eux? Ils devraient être chargés une fois lorsque je commence l'activité et plus jamais. P>
meilleures salutations et merci d'avance, Jan Oliver P>
3 Réponses :
Créer une liste d'objets représentant chaque ligne. Créez un chargeur comme fil d'arrière-plan qui met à jour les objets lors de la chargement des données. Votre liste de liste dessinera des données des objets. P>
(Pas une bonne idée si vous avez des centaines de lignes et une énorme quantité de données dans chaque ligne - dans ce cas, vous ne devez que charger des données dans quelques lignes de la ligne actuellement active et avoir une sorte de cache MRU) . P>
À l'heure actuelle, j'ai ma propre implémentation de ArrayAdapter, remplacement de GeveView pour remplir la liste des lignes plus complexes. Vous dites que je devrais mettre en cache des lignes dans une liste d'objets, puis la liste de liste les chargera tous à la fois?
Non, la liste de réception ne les chargera que sur demande, vous ne pouvez pas modifier cela. Vous devez les charger. Créez un fil d'arrière-plan qui ne fait que charger toutes les données et remplit votre tableau. La liste de liste ne chargera que les données qui sont remplacées par votre fil d'arrière-plan. La seule autre chose que vous devez garder à l'esprit est que votre fil d'arrière-plan doit mettre à jour une vue si elle termine le chargement lorsqu'il est à l'écran.
Si vous le pouvez, commencez par un tableau d'images pleine des "images d'espace réservé", puis téléchargez les images dans une matrice de tir à l'asyncaptage pendant la création. Pendant la vision de la ligne, consultez simplement le tableau. De cette façon si elle a la nouvelle image, elle le chargera, sinon, il obtiendra l'espace réservé. P>
Si vous avez beaucoup de données, il va devenir réel lent et être une expirience de merde pour l'utilisateur. P>
Lorsque vous effectuez une liste de looks paresseux, c'est parce que vous souhaitez accélérer votre application. Éteignez-le n'est pas la meilleure solution. Ainsi, ce que vous pouvez faire est de mettre en œuvre un système de cache de base afin d'éviter de télécharger et de définir l'imageView à nouveau et à nouveau.
Le moyen le plus simple de le faire consiste à mettre en œuvre un hashmap avec des URL comme des clés et des bitmaps comme des valeurs. Quelque chose comme ceci: p> si ces images seront les mêmes, ce qui signifie que chaque fois que vous ouvrez l'application, les mêmes images seront téléchargées, vous ferez mieux de sauvegarder ces images dans Le système de fichiers et utilisez-les de là. P> D'autre part, si les images ont tendance à changer, vous pouvez implémenter des éléments intéressants: Utilisez En ce qui concerne votre commentaire, je vous recommande vivement de regarder la vidéo que j'ai posté. Il est une heure de long, mais cela vaut vraiment l'effort. Lors de l'utilisation d'un adaptateur, vérifiez si le convertview est NULL est un moyen simple d'améliorer les performances, bien qu'il existe d'autres techniques qui amélioreront encore votre application. De plus, si vous aviez des problèmes lors de l'utilisation de cette astuce, c'est parce que vous en mettez probablement le mauvais sens. N'oubliez pas que, même si vous ne refliminez pas les vues, vous devez définir la valeur de chacune des vues des enfants, sinon vous rencontrerez des problèmes. P> P> Softreferences code>. Il y a une explication dans Cette vidéo . Ceci peut également être utilisé si vous chargez des images du système de fichiers. P> Modifier h3>
Merci pour votre réponse! Je vais probablement mettre en œuvre cela. Quoi qu'il en soit, je viens de sculpter sur l'argument ConvertView dans la méthode GeveView de l'arrayadapter. Vérification de cela pour NULL et s'il n'est pas nul, revenez-le, résout mon problème et accélère la liste extrêmement; Malheureusement, il mélange des lignes lors du défilement et montre une rangée plus d'une fois ...
J'ai ajouté plus d'informations à ma réponse.
Très bien. Merci encore pour la réponse. Je vais regarder la vidéo. Le cache d'image fonctionne bien, cependant, et j'ai également essayé d'utiliser un cache pour les rangées. Mais cela ne fonctionne pas vraiment. Je vais regarder la vidéo demain et, espérons-le, avec une liste de réception rapide. :)