【问题标题】:Android, image loading and memory allocationsAndroid,图像加载和内存分配
【发布时间】:2011-01-25 10:56:03
【问题描述】:

我有一个应用程序,其中包含几个扩展 View 的自定义视图。每个自定义视图都会加载一堆图像(约 20 个)并将它们按比例缩小:

mBmp[img1] = BitmapFactory.decodeStream(context.getAssets().open("img01.png"));
mBmp[img2] = BitmapFactory.decodeStream(context.getAssets().open("img02.png"));
mBmp[img3] = BitmapFactory.decodeStream(context.getAssets().open("img03.png"));
        ...
mBmp[img20] = BitmapFactory.decodeStream(context.getAssets().open("img20.png"));

这一切都在一个 try-catch 块中。

这部分不会造成任何问题。但是,一旦我达到缩放图像的地步,我就会调用使用 createScaledBitmap 的缩放方法:

protected void scaleImages(float mWidth, float mHeight)
    {
        float mXRat = mWidth/1024;
        float mYRat = mHeight/600;

        for (int i = 0; i < mBmp.length; i++)
        {
            float oldX = mBmp[i].getWidth();
            float oldY = mBmp[i].getHeight();
            double newX = (mXRat * oldX);
            double newY = (mYRat * oldY);
            Bitmap newBmp = Bitmap.createScaledBitmap(mBmp[i], (int) newX, (int) newY, true);
            mBmp[i] = newBmp;
        }
    }

我得到一个错误,我试图分配太多内存。

01-25 10:16:44.227: ERROR/dalvikvm-heap(14548): 1497600-byte external allocation too large for this process.
01-25 10:16:44.227: ERROR/dalvikvm(14548): Out of memory: Heap Size=4871KB, Allocated=2544KB, Bitmap Size=18683KB
01-25 10:16:44.227: ERROR/GraphicsJNI(14548): VM won't let us allocate 1497600 bytes

我的单个图像在扩展到 RAM 时不应该占用这种内存,那么为什么在尝试调整它们的大小时它会用完呢?

【问题讨论】:

    标签: android image memory


    【解决方案1】:

    这不是单个图像大小。此消息显示为 bcoz u r 将其解码为位图并存储在堆中以供临时使用。因此它正在显示消息。

    【讨论】:

    • 您愿意提供一个可能的解决方案吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-03
    • 2013-02-11
    • 2016-07-19
    • 1970-01-01
    • 2011-02-21
    相关资源
    最近更新 更多