0

我正在使用 opencv 库(面部检测示例)开发一个 android 图像捕获应用程序。我的目标是捕获 5 张图像并将其发送到我的网络服务。抓取图像后,将Bitmap图像转换为base64字符串并存储到string[]中。最后,我将此字符串 [] 发送到 Web 服务。这个应用程序在我的模拟器中工作。但是当我检查我的 android 平板电脑时,它会抛出“Grow heap (frag case) to 7.827MB for 1228816-byte allocation”异常并退出应用程序。在互联网上搜索后,我找到了一些与此相关的链接。

链接1:Android增长堆碎片案例

链接 2:如何清除增长堆?

但他们没有告诉我如果问题存在我会怎么做。看到一些链接后,我认为这可能是因为内存泄漏。但我不知道该怎么办。由于我是android新手,你能给我一些关于这方面的建议会很棒。

我已在以下链接中附加了我的日志文件。 http://pastebin.com/82VxhBmz

4

2 回答 2

1

使用相机时臀部的增长很可能是由于预览相机的大小。命中可能会帮助您解决问题(在实现 SurfaceHolder.Callback 时):

public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {




    Camera.Parameters parameters = camera.getParameters();
    //get all supported sizes for the camera
    List<Camera.Size> sizes = parameters.getSupportedPreviewSizes();
    //make sure you select the smallest size (resolution), which is first in the list
    Camera.Size selected = sizes.get(0);
    //add the selected size
    parameters.setPreviewSize(selected.width, selected.height);
    //set the parameters
    camera.setParameters(parameters);
    camera.startPreview();

}`
于 2014-07-21T16:44:18.573 回答
1

您面临的问题主要是因为 base64 将图像转换为字符串。
当图像具有大尺寸@时,例如当您从相机单击图像时,它总是以 MB 为单位,当转换为字符串时将使用更多内存。因此,当您单击许多图像时,字符串大小会增加您的内存大小并迫使 android 销毁您的应用程序,因为 Android 会破坏应用程序,当它缺乏内存时会使用更多内存。

因此,要将多个图像上传到服务器,请使用不同的方法示例,请参考以下问题,其中我给出了用户如何将图像上传到服务器的答案。
Android将图片从图库上传到服务器

于 2012-12-17T10:13:57.737 回答