加载背景图片时,Android仍会占用过多内存

时间:2016-10-27 19:12:22

标签: android image memory

我已阅读多篇有关背景图片内存使用情况的帖子,例如this

  1. 我的背景图片是2048x1365 59KB JPEG;它的未压缩位图是11MB
  2. 特定设备视图的背景为480x605,因此使用率为1.1MB(480x605x4)
  3. 我的应用最初使用12MB而没有背景图片
  4. 将图像放在drawable-nodpi /中并将其设置在布局XML中导致内存使用量达到23MB;所以确切基数+ BMP大小
  5. 使用BitmapFactory根据33MB内存使用量的建议结果解码图像(移动到raw /)。 (见下面的代码。)
  6. 设置背景的代码

    View view = findViewById(R.id.main_content);
    Rect rect = new Rect();
    view.getLocalVisibleRect(rect);
    BitmapFactory.Options options = new BitmapFactory.Options();
    options.outHeight = rect.height();
    options.outWidth = rect.width();
    options.inScaled = false;
    Bitmap backgroundBitmap = BitmapFactory.decodeResource(getResources(), backgroundId, options);
    view.setBackgroundDrawable(new BitmapDrawable(getResources(), backgroundBitmap));
    

    出了什么问题?我还可以做些什么来缩减内存使用量?

2 个答案:

答案 0 :(得分:1)

BitmapFactory为您提供低内存图片的技巧是在inSampleSize上填写BitmapFactory.Options。这会告诉BitmapFactory在加载图像时对图像进行缩减采样,为您提供分辨率较低的图像,但是可以更好地调整图像以适应您计划使用的图像。您需要根据使用图像的inSampleSize(或其他)的分辨率计算所需的ImageView

This sample app演示了如何从assets/加载一些具有不同inSampleSize值的图像。

答案 1 :(得分:0)

我也经历过这种情况,但图像要小得多。我发现这种情况正在发生,因为我对所有屏幕分辨率使用相同的图像大小。我建议您使用相同图像的不同尺寸,并将它们放在相应的文件夹中。