继续在Android中获取OOM错误

时间:2012-07-11 16:29:10

标签: android android-lifecycle

我在获取OOM错误或Canvas尝试绘制回收的位图错误之间保持交替。我不确定哪个是最好的方法,并且会欣赏一些输入。我有一个主屏幕上有几个图像。如果我像这样处理它,每当我加载回屏幕时都会出现OOM错误:

@Override
protected void onDestroy() {
    super.onDestroy();

    recycleHomescreenImages();
    unbindDrawables(findViewById(R.id.homescreen_root_view));
    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();
    }
}

我的主屏幕上的图像似乎没有被正确回收。但是,如果我将unbindDrawables(View视图)方法更改为这样,我会得到一个Canvas尝试使用循环位图错误。

private void unbindDrawables(View view) {
    if (view.getBackground() != null) {
    view.getBackground().setCallback(null);
    if (view.getBackground() instanceof BitmapDrawable)
        ((BitmapDrawable)view.getBackground()).getBitmap().recycle();
    }
    if (view instanceof ViewGroup) {
        for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
        unbindDrawables(((ViewGroup) view).getChildAt(i));
        }
    ((ViewGroup) view).removeAllViews();
    }
}

感谢您提供任何意见,如果您需要更多信息,请与我们联系。

编辑:更令人困惑的是,在我第一次恢复活动后,我没有使用循环位图获取Canvas,但只有当我第二次恢复活动时才会这样。

0 个答案:

没有答案