我知道有很多关于 android 位图图像内存不足的讨论,但我想知道是否有人可以向我解释一下。
目前在我的应用程序中,我有一个列出图像缩略图(低质量)的活动,当我单击图像时,它会打开一个新活动来全屏查看图像。在我的第二次活动课中,我有:
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 1;
bm = BitmapFactory.decodeFile(myImagePath, options);
然后我将其放入 ImageView 中以显示它。这可以正常工作并显示我的图像的全部质量。但是,如果我单击返回,然后再次单击查看该图像(并重复 6 次).. 在第 6 次打开图像(activity2)时,我收到内存不足错误,提示“堆大小=6919KB,已分配=3125KB,位图”大小 = 25848KB!
位图尺寸怎么这么大?我假设它可能一直在创建新实例,所以我决定在按下后退键时在我的第二个活动中放置一个方法。在这个方法中,我设置了我的 bitmap=null 并执行了 System.gc()清除垃圾收集器但这并没有解决问题。我在第六次单击缩略图以全分辨率查看图像时仍然出现内存不足错误
谁能解释为什么?谢谢
android 有一些很棒的信息详细解释了这一切,以及如何克服这个问题here.
每个像素为 4 字节。 600 万像素 = 24MB
一张照片可以用完所有内存。
位图占用大量内存,尤其是对于照片等丰富的图像。例如,Galaxy Nexus 上的相机可拍摄高达 2592x1936 像素(5 兆像素)的照片。如果使用的位图配置是 ARGB_8888(从 Android 2.3 开始的默认值),则将此图像加载到内存中大约需要 19MB 内存(2592*1936*4 字节),立即耗尽某些设备上每个应用程序的限制。
我再次向你指出这一点很棒的链接我从另一个 SO Question 中发现,其中包含如何正确解决问题的教程。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)