首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >android 495KB图像,堆大小为10MB

android 495KB图像,堆大小为10MB
EN

Stack Overflow用户
提问于 2012-07-06 15:10:55
回答 4查看 3.7K关注 0票数 1

我正在尝试在我的应用程序中加载一个大小为495KB的图像。如果我加载这个图像,那么堆大小从25MB增加到35MB,这会导致我的应用程序出现实际内存问题。如果我不加载这个镜像,那么堆大小就会保持在25MB。谁能告诉我为什么它会占用这么大的堆大小?

图片如下所示

我用来加载图像的代码是

代码语言:javascript
复制
    InputStream s4 = getResources().openRawResource(R.drawable.parallax_layer4);    
    FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT);
    System.gc();
    if(bitmap4 != null) {
        bitmap4.recycle();
    }
    s3 = null;
    System.gc();     

    bitmap4 = bitmap(s4);
    layer4Back = new ImageView(this);
    layer4Back.setImageBitmap(bitmap4);
    layer4Back.setScaleType(ScaleType.FIT_XY);
    parallaxLayout.addView(layer4Back, 3, lp);
    try {
        s4.close();
    } catch (IOException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
    }
    s4 = null;
    System.gc();

private static Bitmap bitmap(final InputStream is) {
    Bitmap bitmap = null;
    System.gc();
    Options options = new BitmapFactory.Options();
    options.inPreferredConfig = Bitmap.Config.RGB_565;
    options.inSampleSize = 1; 

    try {
       // bitmap = BitmapFactory.decodeStream(is);
       bitmap = BitmapFactory.decodeStream(is, null, options);

    } catch (Error e) {
       // TODO: handle exception
       e.printStackTrace();
    }
    return bitmap;
}

谢谢Ayaz Alavi

EN

回答 4

Stack Overflow用户

发布于 2012-07-06 15:18:15

图像文件在加载到内存中时是解压缩的。在5600 x 480像素和每像素32位的情况下,您的图像在未压缩时几乎正好是10MB。

我的建议是把它切成更小的部分,只加载你需要的部分。

票数 5
EN

Stack Overflow用户

发布于 2012-07-06 15:19:16

5,600px * 480px *4字节= 10,752,000字节,所以这并不奇怪。

Displaying Bitmaps Efficiently article中有一些很好的指导,以及相当多的问题,所以在这里讨论好的解决方案。

票数 2
EN

Stack Overflow用户

发布于 2012-07-06 15:19:09

那你想要什么呢?图像是5600x480px,现在在内存中,每个像素的都需要32位(请给我纠正一下)。计算一下,你就会明白为什么它是一个问题。您需要使用较小的图像或将图像分割成多个部分,并在需要时加载所需的部分,然后丢弃不必要的部分。

我遇到了类似的问题,这里讨论了这个问题:Android app crash out of memory on relaunch

这里也有关于这个主题和可能的解决方案的很长的讨论:Strange out of memory issue while loading an image to a Bitmap object

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11357483

复制
相关文章

相似问题

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