目前在我的应用程序中,我有一个列出图像缩略图(低质量)的活动,当我点击图像时,它会打开一个新的活动以全屏幕查看图像.在我的第二个活动课我有:
BitmapFactory.Options options = new BitmapFactory.Options(); options.inSampleSize = 1; bm = BitmapFactory.decodeFile(myImagePath,options);
然后我将其放入ImageView中显示.这样可以显示我的形象,使其品质全面.但是如果我点击返回,然后再次点击查看该图像(并重复这6次)..在第6次打开图像(activity2)我得到一个内存错误说,堆大小= 6919KB,分配= 3125KB,位图大小= 25848KB!
位图大小如何大?我假设它可能一直在创建新的实例,所以我决定把一个方法放在我的第二个活动中,当按下后键时,在这个方法我设置我的位图= null,也是System.gc()清除垃圾收集器但是这没有解决问题.在第六次点击缩略图时,仍然会出现内存不足错误,以全分辨率查看图像
谁能解释为什么?谢谢
解决方法
每个像素是4字节. 6M像素= 24MB
一张照片可以耗尽所有的内存.
Bitmaps take up a lot of memory,especially for rich images like photographs. For example,the camera on the Galaxy Nexus takes photos up to 2592×1936 pixels (5 megapixels). If the bitmap configuration used is ARGB_8888 (the default from the Android 2.3 onward) then loading this image into memory takes about 19MB of memory (2592*1936*4 bytes),immediately exhausting the per-app limit on some devices.
再次,我指出你这个great link我发现从另一个SO问题,有教程如何正确地解决问题.