首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android内存不足的图像捕捉

Android内存不足的图像捕捉
EN

Stack Overflow用户
提问于 2010-12-22 16:03:59
回答 2查看 6.2K关注 0票数 7

我有一个活动,拍照(以完全可能的分辨率,所以相当大),然后应用程序有机会分析他们。一次只处理一张照片。问题是,在4-5张照片之后,我跑进了一个“内存不足”的地方。我明白了

dalvikvm-内存堆中的5070745字节分配

(字节大小不同)后面跟着

JNI无法为

数据分配字节数组

我的应用程序不会崩溃,但在我看来,相机从现在开始就无法传送图像了。在我的应用程序中,我注意到内存的使用,但是这里似乎有一个内存泄漏,我在问我如何处理这个问题。对此有什么解决方案吗?

EN

回答 2

Stack Overflow用户

发布于 2010-12-22 16:16:51

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

代码语言:javascript
复制
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还不熟悉,所以这可能根本不起作用。;-)

致以敬意,

凯文

票数 10
EN

Stack Overflow用户

发布于 2011-02-28 13:46:17

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

同样,在onPictureTaken()方法中,如果不需要alpha通道,可以使用Bitmap.Config.RGB_565而不是ARGB(默认)将图片中的tempData保存到位图中。

代码语言:javascript
复制
   // 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);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4511057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档