J'ai un recyclerview dans une application Android. Je fais une sorte d'explorateur de fichiers. p>
Lorsque je branche mon propre périphérique sur l'ordinateur, il manque de mémoire lorsque j'atteigne le dossier de la caméra dans le dossier DCIM. p>
C'est parce qu'il y a beaucoup d'images là-bas et j'essaie de les montrer comme imageView au lieu de l'icône de fichier habituelle introduite. P>
Lorsque les images sont chargées, l'application s'éloigne de l'espace afin qu'il se bloque p>
J'ai implémenté l'application à l'aide d'un recyclerview pensant que cela va recycler les vues et ne pas sortir de mémoire ou de décalage. Mais cela ne semble pas fonctionner. P>
J'ai essayé de faire une sorte de solution de contournement en chargement des images uniquement pour la partie visible de la recyclerview, mais elle nécessite beaucoup de rebondissements et cela n'a pas fonctionné à la fin. P>
Y a-t-il un moyen de charger de nombreuses images et de vous assurer qu'ils ne prennent pas trop d'espace dans la RAM. J'utilise un vieux téléphone et j'aimerais que mon application y travaille. C'est une galaxie Ace II. P>
3 Réponses :
utiliser glisse
Ajouter com.github.bumptech.glide: Glide: 4.10.0 code> dans vos dépendances p>
Merci pour vos réponses. J'ai fini par faire ce qui suit:
Bitmap bitmap = BitmapFactory.decodeFile(filePath); bitmap = Bitmap.createScaledBitmap(bitmap, 50, 50, false); imageView.setImageBitmap(bitmap);
Vous pouvez mettre la création du bitmap à l'échelle dans un fil d'arrière-plan. Ou, comme d'autres suggéraient d'autres, utilisez une bibliothèque comme Glide ou Picasso.
Pourquoi gérer des images dans l'application, à l'aide de GLIDE ou PICASSO est stronly recommandé.
1- Pour implémenter glisse https://github.com/bumptech/glide (que je préfère) p>
2- pour implémenter Picasso https://square.github.io/picasso/#download (aussi une bibliothèque forte) p>
Ils gèrent des images professionnelles. Ils ont des outils pour éviter l'OOM causée par des images. Vous devriez suivre des tutoriels pour les mettre en œuvre et les utiliser. P>
mais OOM n'est pas seulement à cause des images. Toute application doit être observée. P>
https://stackoverflow.com/a/58358334/11982611 Ce message peut aider à cela. P>
Après implication, pour redimensionner avec GLIDE P>
Glide.with(mCtxt).load( image uri or url or drawable ) .error( image when error occurs ) .override(320,180) // overrided width and height .centerCrop() .into( imageview );
Utilisez-vous une bibliothèque pour afficher des images ou une manipulation par vous-même?
J'utilise simplement la ligne: dessinable draigable = digue.createfromath (PathOimage)
Je suppose que les images sont assez grandes, vous devriez donc les réduire avant de les charger dans l'image. Vous pouvez utiliser des bibliothèques comme Glide, Picasso ou UniversalImageloader pour réduire les images pour vous.
Y a-t-il des méthodes natives pour réduire les images?
Voyez ici: développeur.android.com/training/displaying-bitmaps/...
Utilisez Glide ou Picasso pour afficher des images ...
S'il vous plaît, veuillez d'abord Google. Ce problème est aussi vieux que la plate-forme
Est-ce que cela répond à votre question? Android: Java.lang.outofMemoryError: Impossible d'allouer un 23970828 Répartition des octets avec 2097152 octets gratuits et 2 Mo jusqu'à l'OOM
Vous n'avez pas besoin de réduire le chargement pour une partie visible de RECYCLERView. C'est exactement ce que le recyclerview fait pour vous.