如何最大限度地减少Android中的活动泄漏

时间:2013-02-20 00:31:10

标签: android android-layout

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

有人有解决此问题的更好方法吗?

由于

0 个答案:

没有答案