Double Possible:
Android: Étrange, hors de question de la mémoire lors du chargement d'une image à un objet Bitmapje suis le téléchargement des images à partir de l'Url et de les afficher. Au moment du téléchargement c'est de donner des
out of memory error : bitmap size exceeds VM budget
. Je suis à l'aide de drawable. Le Code est ci-dessous:HttpClient httpclient= new DefaultHttpClient(); HttpResponse response=(HttpResponse)httpclient.execute(httpRequest); HttpEntity entity= response.getEntity(); BufferedHttpEntity bufHttpEntity=new BufferedHttpEntity(entity); InputStream instream = bufHttpEntity.getContent(); Bitmap bm = BitmapFactory.decodeStream(instream); Bitmap useThisBitmap = Bitmap.createScaledBitmap(bm,bm.getWidth(),bm.getHeight(), true); bm.recycle(); BitmapDrawable bt= new BitmapDrawable(useThisBitmap); System.gc();
Voici l'erreur:
05-28 14:55:47.251: ERROR/AndroidRuntime(4188): java.lang.OutOfMemoryError: bitmap size exceeds VM budget
Réponses
Trop de publicités? Utilisez decodeStream(is, outPadding, opts)
avec
BitmapFactory.Options opts=new BitmapFactory.Options();
opts.inDither=false; //Disable Dithering mode
opts.inPurgeable=true; //Tell to gc that whether it needs free memory, the Bitmap can be cleared
opts.inInputShareable=true; //Which kind of reference will be used to recover the Bitmap data after being clear, when it will be used in the future
opts.inTempStorage=new byte[32 * 1024];
Vous pouvez vérifier la taille de l'image, puis la réduire par un facteur approprié.
Voir cette question: Gestion de grandes images bitmap
Ce problème semble avoir été signalé à plusieurs reprises, ici et ici par exemple... désolé Shalini, mais si c'est le même problème, il semble qu'il n'y a pas de solution à tous les...
Le seul conseil que de Romain Guy est d'utiliser moins de mémoire...
Donc, bonne chance à penser que votre choses différemment...
Enfin, après avoir rééchantillonné l'image comme suggéré ci-dessus, vous pouvez appeler bitmap_file.recycle () .
Le FAIT est qu'il y a un BUG sur certaines versions d'Android, en particulier la version 2.1 de l'échec de tous les temps avec des questions comme celle-ci.
J'ai publié une application dans laquelle j'ai pris beaucoup de soins sur l'utilisation des ressources. J'ai même supprimé un grand nombre d'images qui je l'utiliser et maintenant, ils sont créés à la volée à l'aide de primitives graphiques. J'ai aussi recycler les bitmaps lorsque vous ne les utilisez. Et bien sûr, j'ai vérifié que je n'ai pas de fuites de mémoire dans mon application: l'utilisation de la mémoire ne se développent PAS sans contrôle, il garde tout le temps dans des valeurs raisonnables.
Même si je dois investir beaucoup d'efforts à essayer d'éviter ce problème, je continue à avoir beaucoup de gênant exceptions comme celle de 2.1 et 2.1-update1 appareils. Je suis à l'aide de critercism maintenant se bloque, et j'ai vu qu'Il se produit même lorsque l'application est en utilisant seulement 4 mo de RAM, quatre fois moins que les 16M de taille de segment de mémoire que chaque appareil Android doit avoir une application -et le fait est que la plupart des appareils, de nos jours, les tailles de tas plus gros que 16M-.
Tous mes bitmaps ont une taille de 800 x 480 pixels, que dans le pire des cas comme ARGB_8888 ne peut pas occuper plus de 1,5 MO chacun, mais il bloque une tentative de chargement d'un en ayant seulement 4 méga-octets occupés, donc il devrait y avoir au moins un autre 12 MO d'espace libre. Et la plupart de mes images sont chargées en tant que ARGB_4444 qui occupe la moitié de la mémoire, je ne l'utilise ARGB_8888 lorsque les bitmaps à l'air vraiment mauvais avec 4444.
Donc pour moi il est assez clair qu'il y a quelque chose sur ces versions d'Android qui ne fonctionne pas bien. 99'9% de ces accidents vient de 2.1 et 2.1-mise à jour, et le reste peut être expliqué par d'autres ponctuel raisons.