Android上的位图大小超过VM预算错误

Android上的位图大小超过VM预算错误,第1张

概述我正在从Asset文件夹中将100个图像加载到数组对象.图片非常小(每个png~20k),我使用这个代码做,并防止内存泄漏&优化表现:在循环中://createresizedbitmapfromassetresourceInputStreamistr=assetManager.open(pics[i]);Bitmapb=BitmapFactory.decod

我正在从Asset文件夹中将100个图像加载到数组对象.图片非常小(每个png~20k),我使用这个代码做,并防止内存泄漏&优化表现:

在循环中:

// create resized bitmap from asset resource        inputStream istr = assetManager.open(pics[i]);        Bitmap b = BitmapFactory.decodeStream(istr);        b = Bitmap.createScaledBitmap(b, 240, 240, true);

其中pics [i]是位于我的Asset文件夹中的文件名列表.

该代码适用于我,但我仍然不时收到用户的错误(我在Developer Console错误上看到它):

java.lang.OutOfMemoryError: bitmap size exceeds VM budgetat androID.graphics.Bitmap.nativeCreate(Native Method)at androID.graphics.Bitmap.createBitmap(Bitmap.java:468)at androID.graphics.Bitmap.createBitmap(Bitmap.java:435)at androID.graphics.Bitmap.createScaledBitmap(Bitmap.java:340)

我能做些什么来改善它吗?或者这是AndroID的世界,我们永远无法提供完美的应用程序?

解决方法:

当然,你可以改进一些东西:不要同时将太多的图片加载到内存中(或减小它们的大小).有些设备没有太多可用内存.您的设备可能具有比某些客户电话更高的堆限制.因此当它适合你时它会崩溃(对于某些堆限制,请参阅this video [在4:44]).

您可以通过ActivityManager.getMemoryClass()获得可用的堆大小.

为了改善这一点,请测试您现在需要哪些图片(显示哪些图片),哪些不是.仅加载所需的那些并回收您不再需要的位图.

还可以尝试使用BitmapFactory.decodeResource()和BitmapFactory.Options.inSampleSize.这允许您直接以较低分辨率加载图像,而无需以完整尺寸加载它们,然后像​​在此处一样调整它们的大小.

总结

以上是内存溢出为你收集整理的Android上的位图大小超过VM预算错误全部内容,希望文章能够帮你解决Android上的位图大小超过VM预算错误所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1105342.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存