问题出现在最后一行,当我尝试新建这样的数组时,它会崩溃。在Logcat中,它显示“java.lang.OutOfMemoryError”。那是什么意思?请帮忙。
Bitmap bmap;
Bitmap bMapRotate;
int bmapWidth;
int bmapHeight;
int[] bmapColorArray;
int bmapColorArraySize;
bmapWidth = bmap.getWidth();
bmapHeight = bmap.getHeight();
bmapColorArraySize = bmapWidth * bmapHeight;
bmapColorArray = new int[bmapColorArraySize];
bmap.getPixels(bmapColorArray, 0, bmapWidth, 0, 0, bmapWidth, bmapHeight);
然后调用将此int数组传递给本机层。
答案 0 :(得分:3)
Android应用程序的可用内存有限。取决于屏幕分辨率/大小从16MB到24MB(IIRC)。
因此,如果你为大图像(10M像素)分配了几个数组,那么你的记忆很快就会满了。
尝试仅存储必要的信息。如果您使用的是图像的缩放版本(您可能是),则存储缩放版本而不是完整版本。另外,请勿将图像保留在内存中(可能)不再使用。
换句话说,尽量保守你的记忆,特别是大量的内存分配。
答案 1 :(得分:0)
手动调用垃圾收集器。
System.gc();
答案 2 :(得分:0)
如果您想避免崩溃,请尝试此操作。
Runtime runtime = Runtime.getRuntime();
Log.d("Free memory",""+runtime.freeMemory());
if(runtime.freeMemory()>(h*w))
{
int[] i = new int[h* w];
}
else
{
Toast.makeText(getApplicationContext(),"No More Heap memory",Toast.LENGTH_LONG).show();
}