我有一个活动,拍照(以完全可能的分辨率,所以相当大),然后应用程序有机会分析他们。一次只处理一张照片。问题是,在4-5张照片之后,我跑进了一个“内存不足”的地方。我明白了
dalvikvm-内存堆中的5070745字节分配
(字节大小不同)后面跟着
JNI无法为
数据分配字节数组
我的应用程序不会崩溃,但在我看来,相机从现在开始就无法传送图像了。在我的应用程序中,我注意到内存的使用,但是这里似乎有一个内存泄漏,我在问我如何处理这个问题。对此有什么解决方案吗?
发布于 2010-12-22 16:16:51
这可能不是您想要做的事情,但是为了在网格视图上显示多个大图片(4-6MB),我发现这段代码可以创建一个质量更低的更小的位图,以避免内存不足的情况:
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 5;
options.inPurgeable = true;
options.inInputShareable = true;
Bitmap bm = BitmapFactory.decodeFile("/sdcard/myapp/" + filesFound.get(position), options);选项是重要的部分,通过改变设置,我设法将内存从崩溃的位置降到了开始使用inSampleSize时的大约28 by。随着inPurgeable和inInputShareable设置设置为true,它进一步下降。我的活动仍然缓慢,但好多了。
对于您的应用程序,如果它能够分析位图,那么上面的代码可能会减少内存的使用,从而使其工作。我对Android还不熟悉,所以这可能根本不起作用。;-)
致以敬意,
凯文
发布于 2011-02-28 13:46:17
由于您在4-5张图片之后内存不足,您可能不会调用yourBitmap.recycle();在将它保存到SD卡之后?
同样,在onPictureTaken()方法中,如果不需要alpha通道,可以使用Bitmap.Config.RGB_565而不是ARGB(默认)将图片中的tempData保存到位图中。
// Create options to help use less memory
Options opt = new Options();
opt.inPreferredConfig = Bitmap.Config.RGB_565;
// Decode the tempdata into a bitmap, with the options as the last argument
bitmapFromRawCameraTempData = BitmapFactory.decodeByteArray(rawCameraTempData, 0, rawCameraTempData.length, opt);https://stackoverflow.com/questions/4511057
复制相似问题