【问题标题】:Android out of memory on image captureAndroid 在图像捕获时内存不足
【发布时间】:2010-12-22 16:03:59
【问题描述】:

我有一个 Activity 可以拍照(具有完整的分辨率,非常大),然后应用程序就有机会分析它们。一次只处理一张照片。问题是我在 4 - 5 张照片后遇到“内存不足”。我明白了

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

(字节大小不同)后跟

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

我的应用程序没有崩溃,但在我看来,相机从此时起根本无法传送图像。我注意我的应用程序中的内存使用情况,但这里似乎外部某处存在内存泄漏,我在问我该如何应对。有任何解决方案吗?

【问题讨论】:

    标签: android image capture out-of-memory


    【解决方案1】:

    这可能不是您想要做的,但为了在网格视图上显示多张大图片(4-6 MB),我发现这段代码可以创建一个质量较低的较小位图,以避免出现-内存情况:

    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 和 inInputShareable 设置设置为 true 的情况下,它进一步下降。我的活动仍然迟缓,但已经好多了。

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

    问候,

    凯文

    【讨论】:

      【解决方案2】:

      由于您在 4-5 张图片后内存不足,您可能不会调用 yourBitmap.recycle();保存到 SD 卡后?

      如果您不需要 alpha 通道,也可以在 onPictureTaken() 方法中使用 Bitmap.Config.RGB_565 而不是 ARGB(default) 将图片中的 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);
      

      【讨论】:

      猜你喜欢
      • 2013-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-30
      • 1970-01-01
      • 1970-01-01
      • 2014-09-02
      • 1970-01-01
      相关资源
      最近更新 更多