我在每个活动中加载了很多位图。在活动之间切换后,我得到了很多“java.lang.OutOfMemoryError”。我的应用程序主要是在potrait方向。
我尝试了很多解决方案,并在本网站的其中一个解决方案中找到了一种相对更好的方法。
首先,在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()方法将refence传递给父View,然后执行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中释放它们,在我的情况下这不是一个实际的解决方案,因为我正在加载大量的位图。
有人有解决此问题的更好方法吗?
由于