Android SDK - 预加载小图片会使我的应用程序超出内存

时间:2012-02-28 00:05:01

标签: android image memory

我正在尝试为Android编写一个简单的应用程序。我正在尝试预装7个jpg图像,每个大小~75KB和resoluton 768x480。在HTC Flyer上运行时运行正常。在HTC Evo 3D上运行时,它会崩溃。显然我分配了太多的记忆:

1658880-byte external allocation too large for this process.
Out of memory: Heap Size=6663KB, Allocated=4297KB, Bitmap Size=25278KB, Limit=32768KB
Trim info: Footprint=6663KB, Allowed Footprint=6663KB, Trimmed=452KB
VM won't let us allocate 1658880 bytes
Clamp target GC heap from 33.136MB to 32.000MB

这看起来很奇怪。我应该创建更小的图像吗?鉴于今天的高分辨率屏幕,我似乎不太可能。我想扩大堆大小?那只是从Android 3.0支持。什么是正确的解决方案? 顺便说一句。我用来预加载图片的代码是:

    stringsImages = new Drawable[]{
            getResources().getDrawable(R.drawable.strings0),
            getResources().getDrawable(R.drawable.strings1),
            getResources().getDrawable(R.drawable.strings2),
            getResources().getDrawable(R.drawable.strings3),
            getResources().getDrawable(R.drawable.strings4),
            getResources().getDrawable(R.drawable.strings5),
            getResources().getDrawable(R.drawable.strings6)
    };

为了避免计算中可能出现的混淆,我还在使用~5MB来计算音频数据。

1 个答案:

答案 0 :(得分:1)

如果内存不足,请尝试对每个drawable进行二次采样。这会减小图像的大小以节省内存。请参阅文档here以了解其工作原理。我已经完成了这项工作并节省了记忆,并没有真正看到任何质量差异。尝试在每张图片上运行此代码:

BitmapFactory.Options options=new BitmapFactory.Options();
options.inSampleSize = 4; //the higher this number goes, the smaller the image gets
Bitmap bitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.strings0, options);

然后,您可以使用ImageView

将每个位图设置为imageView.setImageBitmap(bitmap1);