我在获取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,但只有当我第二次恢复活动时才会这样。