gpt4 book ai didi

android - 位图大小超出了 Android 上的 VM 预算错误

转载 作者:太空宇宙 更新时间:2023-11-03 13:04:15 25 4
gpt4 key购买 nike

我正在将 100 张图片从 Asset 文件夹加载到一个数组对象中。图片非常小(每张 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] 是我的 Assets 文件夹中的文件名列表。

该代码适用于我,但我仍然不时收到用户的错误(我在开发者控制台错误中看到):

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 的世界,我们永远无法交付完美的应用程序?

最佳答案

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

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

要改进这一点,请测试您现在需要哪些图片(已显示)哪些不需要。仅加载所需的位图并回收您不再需要的位图。

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

关于android - 位图大小超出了 Android 上的 VM 预算错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7108169/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com