【发布时间】:2011-10-30 15:14:37
【问题描述】:
我在一个活动中处理许多位图以创建一个 AnimationDrawable 并且它运行良好(即使它使用大量内存)。但是当用户按下返回并返回到 MainActivity 时,内存并没有被释放。
那一刻:
- 如果用户随后重新启动第二个活动以创建另一个活动 AnimationDrawable,会因为内存不足而发生OOMError 分配给我的应用程序不能同时包含两个 AnimationDrawables 时间。
- 如果用户调用finish(),应用程序保持缓存状态,内存也不会释放。
如何释放内存?我尝试在第二个活动结束时将所有变量设置为 null,我尝试在不同的时刻调用 system.gc()。
这部分代码应该够用了:
try {
d = (BitmapDrawable) BitmapDrawable.createFromStream(new BufferedInputStream(new FileInputStream(src)), null);
b = ((BitmapDrawable) d).getBitmap();
b = Bitmap.createScaledBitmap(b, 300, 450, true);
d = new BitmapDrawable(b);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
animation.addFrame(d,1000/fps); // animation is an AnimationDrawable
这部分代码在 for 循环中,它通常会重复大约 70 到 100 次,因此 animation 相当“繁重”。我该如何摆脱它?我希望应用程序在第二个活动暂停后立即“忘记它”。
非常感谢。 :)
【问题讨论】:
标签: java android bitmap out-of-memory