Android在图像捕捉方面内存不足

我有一个活动,拍摄照片(完全可能的解决scheme,非常大),应用程序,然后有机会分析它们。 一次只处理一张照片。 问题是我跑了4 – 5张照片后,“内存不足”。 我懂了

dalvikvm-heap 5070745字节分配内存不足

(字节大小变化)后面

Camera-JNI无法为JPEG数据分配字节数组

我的应用程序不会崩溃,但在我看来,相机只是无法从这一点上传递图像。 我注意在我的应用程序的内存使用情况,但在这里似乎有一个内存泄漏的地方外面,我问我怎么能应付这个。 现有的任何解决scheme?

Solutions Collecting From Web of "Android在图像捕捉方面内存不足"

这可能不是你正在做的,但为了在网格视图上显示多个大图片(4-6 MB),我发现这个代码创build一个质量较低的较小位图,以避免“记忆情况:

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的时候开始把内存从崩溃的地方降低到28MB左右。 它进一步下降inPurgeable和inInput可分享设置设置为true。 我的活动仍然很慢,但好多了。

对于您的应用程序,如果它可以分析一个位图,上面的代码可能会缩小内存使用量足以使其工作。 我还是新来的Android,所以这可能是不可能的.. ;-)。

问候,

凯文

由于您在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);