首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android上的位图大小超过虚拟机预算错误

Android上的位图大小超过虚拟机预算错误
EN

Stack Overflow用户
提问于 2011-08-18 21:27:42
回答 3查看 1.8K关注 0票数 3

我将100张图片从Asset文件夹加载到一个数组对象中。图片非常小(每个图片都是png ~20k ),为了防止内存泄漏和优化性能,我使用下面的代码对其进行了修改:

在循环中:

代码语言:javascript
运行
复制
// create resized bitmap from asset resource
        InputStream istr = assetManager.open(pics[i]);
        Bitmap b = BitmapFactory.decodeStream(istr);
        b = Bitmap.createScaledBitmap(b, 240, 240, true);

其中picsi是位于my Asset文件夹中的文件名列表。

代码对我有效,但我仍然会时不时地收到来自用户的错误(我在开发人员控制台错误中看到它):

代码语言:javascript
运行
复制
java.lang.OutOfMemoryError: bitmap size exceeds VM budget
at 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的世界,我们永远不能交付一个完美的应用程序?

EN

Stack Overflow用户

回答已采纳

发布于 2011-08-18 21:41:49

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

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

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

也可以尝试使用BitmapFactory.decodeResource()BitmapFactory.Options.inSampleSize。这允许您以较低的分辨率直接加载图像,而不是以全尺寸加载图像,然后像您在这里所做的那样调整大小。

票数 2
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7108169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档