我有一个应用程序,其中包含几个扩展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的scale方法:
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时不应该占用这种内存,那么为什么在尝试调整它们时它会耗尽?
答案 0 :(得分:0)
这不是单个图像化。这个消息显示为bcoz u r将其解码为位图并且它存储在堆中以用于temp.so它正在显示该消息。