我知道有很多关于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()清除垃圾收集器,但这没有解决问题 . 在第6次点击缩略图以全分辨率查看图像时,我仍然会出现内存不足错误
有谁能解释为什么?谢谢
2 回答
android提供了一些很好的信息,详细解释了这一点,以及如何解决这个问题here .
每个像素是4个字节 . 6M像素= 24MB
一张照片可以耗尽所有内存 .
我再次指出你从另一个SO问题中找到了这个问题,该问题包含了如何正确解决问题的教程 .
应设置inSample尺寸,以便将图像缩放到显示区域的大小(1 =全尺寸),除非您认为需要图像的所有位,因此2将= 1/2比例4 1 / 4比例等
在使用= null之前完成位图时,也请尝试使用bm.recycle()
Update
看看第二个答案what does recycle do,除非你已经尝试了它并且它没有证明它对你有效,但据我所知它是最好的做法 .