Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 打开大量小图片时发生OutOfMemory错误_Android_Bitmap - Fatal编程技术网

Android 打开大量小图片时发生OutOfMemory错误

Android 打开大量小图片时发生OutOfMemory错误,android,bitmap,Android,Bitmap,可能重复: 在我的应用程序中,我加载了一些我影响到ImageView的小位图(2k到300k之间),在我的应用程序第一次启动时,它工作正常,但当我退出并重新启动它时,在创建位图时,我总是出现OutOfMemory错误 有人能告诉我为什么吗?当您离开活动时,应该手动使用bitmap.recycle() 请参阅问题是因为位图的大小太大,VM无法处理。例如,从您的代码中,我可以看到您正在尝试将一个图像粘贴到imageView中,您正在使用照相机捕获该图像。因此,通常情况下,相机图像的大小将过大,这将

可能重复:

在我的应用程序中,我加载了一些我影响到ImageView的小位图(2k到300k之间),在我的应用程序第一次启动时,它工作正常,但当我退出并重新启动它时,在创建位图时,我总是出现OutOfMemory错误


有人能告诉我为什么吗?

当您离开活动时,应该手动使用
bitmap.recycle()


请参阅

问题是因为位图的大小太大,VM无法处理。例如,从您的代码中,我可以看到您正在尝试将一个图像粘贴到imageView中,您正在使用照相机捕获该图像。因此,通常情况下,相机图像的大小将过大,这将明显增加此错误。因此,正如其他人所建议的,您必须通过采样或将图像转换为更小的分辨率来压缩图像。例如,如果imageView的宽度和高度为100x100,则可以创建缩放位图,以便imageView完全填充。你可以这样做

Bitmap newImage = Bitmap.createScaledBitmap(bm, 350, 300,true);
你必须像这样回收你的位图并清空你的位图

Bitmap bmap.recycle();
Bitmap bmap=null;

我真的怀疑如果你将引用设为空,允许GC(但请证明我错了),你是否必须使用
bitmap.recycle()


我想说的是,很可能你的位图太大了,或者类似的东西

这种回答让我有点害怕。所以GC对位图不是很有用。谢谢!谢谢我真的不明白为什么安卓GC不把位图当作任何其他对象。。。