嗨,让我们说一下当我将 Activity A 调用到 Activity B 时
下面是我的代码
Intent i = new Intent(TemplateList.this, PictureEditor.class);
Bundle b = new Bundle();
b.putString("Key", "2");
b.putString("Index", imagepathString);
i.putExtras(b);
v.getContext().startActivity(i);
System.gc();
Runtime.getRuntime().gc();
finish();
因为在 Activity A 中加载了很多对象(很多图像),所以我通过 System.gc() 清除所有对象; Runtime.getRuntime().gc(); 将被清除并销毁 Activity ,因此不会保留任何对象的分配:)
并且从 Activity B 我要调用 Activity A
btnTemplate.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(PictureEditor.this, TemplateList.class));
dg.dismiss();
if (bmp != null) {
bmp.recycle();
bmp = null;
}
System.gc();
Runtime.getRuntime().gc();
finish();
}
});
//这里我还调用System.gc
和Runtime.getRuntime.gc
并销毁 Activity ,但不知道为什么如果activity A
开始比我得到的
以下错误
12-19 12:44:48.769: E/AndroidRuntime(7539): java.lang.OutOfMemoryError: bitmap size exceeds VM budget
12-19 12:44:48.769: E/AndroidRuntime(7539): at android.graphics.BitmapFactory.nativeDecodeByteArray(Native Method)
12-19 12:44:48.769: E/AndroidRuntime(7539): at android.graphics.BitmapFactory.decodeByteArray(BitmapFactory.java:405)
12-19 12:44:48.769: E/AndroidRuntime(7539): at android.graphics.BitmapFactory.decodeByteArray(BitmapFactory.java:418)
12-19 12:44:48.769: E/AndroidRuntime(7539): at com.redwood.PictureEditor.get_bitmap(PictureEditor.java:257)
12-19 12:44:48.769: E/AndroidRuntime(7539): at com.redwood.PictureEditor$5.run(PictureEditor.java:218)
12-19 12:44:48.769: E/AndroidRuntime(7539): at java.lang.Thread.run(Thread.java:1019)
任何人都可以解决我的问题吗:(
最佳答案
调用这些方法是行不通的,这些方法只是对 GC 说“如果你愿意,现在就可以运行”。
基本上寻找这些问题:
- 位图是不是太大了? -> 将其重新调整为应用中所需的最小大小。
- 您是否复制了太多位图?
- 您不是通过泄漏 Activity B 的上下文来泄漏位图吗?
它可能来自很多地方,但我会首先尝试将其缩小到应用程序中所需的最小大小。
关于android - 通过调用新的 Activity,位图大小超出 VM 预算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13947533/