3

我在每个活动中加载了很多位图。在活动之间切换后,我得到了很多“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 中释放它们,在我的情况下这不是一个实际的解决方案,因为我正在加载很多位图。

有人对这个问题有更好的解决方案吗?

谢谢

4

0 回答 0