我将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);其中picsi是位于my Asset文件夹中的文件名列表。
代码对我有效,但我仍然会时不时地收到来自用户的错误(我在开发人员控制台错误中看到它):
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的世界,我们永远不能交付一个完美的应用程序?
发布于 2011-08-18 21:41:49
当然,你可以改进一些东西:不要同时在内存中加载太多的图片(或者减小它们的大小)。有些设备没有太多可用内存。您的设备可能比您的某些客户电话具有更高的堆限制。因此,当它为您工作时,它会崩溃(有关4:44的一些堆限制,请参阅this video )。
您可以通过ActivityManager.getMemoryClass()获取可用的堆大小。
要改善这一点,请测试哪些图片是您现在需要的(哪些显示了),哪些不是。只加载需要的位图,并回收不再需要的位图。
也可以尝试使用BitmapFactory.decodeResource()和BitmapFactory.Options.inSampleSize。这允许您以较低的分辨率直接加载图像,而不是以全尺寸加载图像,然后像您在这里所做的那样调整大小。
https://stackoverflow.com/questions/7108169
复制相似问题