我在每个活动中加载了很多位图。在活动之间切换后,我得到了很多“java.lang.OutOfMemoryError”。我的应用程序主要是面向肖像的。
我尝试了许多解决方案,并在本网站上的一个解决方案中找到了相对更好的方法。
首先,在 XML 布局的父视图上设置“id”属性:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/RootView"
>
然后,在 Activity 的 onDestroy() 方法中,调用 unbindDrawables() 方法,将引用传递给父视图,然后执行 System.gc()
@Override
protected void onDestroy() {
super.onDestroy();
unbindDrawables(findViewById(R.id.RootView));
System.gc();
}
private void unbindDrawables(View view) {
if (view.getBackground() != null) {
view.getBackground().setCallback(null);
}
if (view instanceof ViewGroup) {
for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
unbindDrawables(((ViewGroup) view).getChildAt(i));
}
((ViewGroup) view).removeAllViews();
}
}
但它并没有完全删除java.lang.OutOfMemoryError
。现在我随机得到这个内存异常。我已经阅读了一些帖子,指出要完全摆脱这个问题,您必须从代码中加载位图并在活动 onDestroy 中释放它们,在我的情况下这不是一个实际的解决方案,因为我正在加载很多位图。
有人对这个问题有更好的解决方案吗?
谢谢