【发布时间】:2013-06-05 10:45:36
【问题描述】:
我的主页布局中有 2 个ImageView,它们的内容来自放置在 SD 卡上的图像,如下面的代码 sn-p 所示:
try {
String tempPath1 = Environment.getExternalStorageDirectory()
+ File.separator + "Clipping_Pictures" + File.separator
+ "06-05-2013_02-06-09pm.png";
File f = new File(tempPath1);
Bitmap b = null, b2 = null;
b = BitmapFactory.decodeFile(f.getPath());
if (f.exists()) {
ivClip1.setImageBitmap(b);//ivClip1 is ImageView
}
tempPath1 = Environment.getExternalStorageDirectory()
+ File.separator + "Clipping_Pictures" + File.separator
+ "06-05-2013_02-06-33pm.png";
f = new File(tempPath1);
b2 = BitmapFactory.decodeFile(f.getPath());
if (f.exists()) {
ivClip2.setImageBitmap(b2);
}
} catch (Exception e) {
e.printStackTrace();
}
当我第一次加载应用程序时,它会在各自的图像视图上显示两个图像。但在第二次启动后,应用程序崩溃并出现以下异常:
OutOfMemoryError: bitmap size超出 VM budget
请注意两个资源图像是 .png,每个大小约为 850kb,我猜应该没问题。
在 SO 和 Internet 上有类似的主题,我尝试了他们建议的一些解决方案,但似乎没有一个有效。
任何帮助表示赞赏。
【问题讨论】:
-
'请注意,两个资源图像是 .png,大小约为 850kb',这无关紧要。重要的是位图的宽度和高度
-
大约。 2000x2600
-
每个位图需要大约 20MB 的内存。位图需要宽*高*4 字节的内存
-
你能告诉我你是怎么得出这个数字的吗:20MB ???
-
您应该在关闭应用时为每个位图调用 'recycle()' 方法,如果不再需要则关闭 Activity。
标签: android android-layout bitmap out-of-memory