回收ImageViews以避免OutOfMemoryError

时间:2016-04-01 10:40:30

标签: java android imageview out-of-memory android-imageview

在某些手机(特别是三星)中,应用程序会出现OutOfMemory错误。

我使用带有4个ImageView的ViewFlipper,它们会在教程中显示。

我发现无法纠正错误或回收图片视图。

这是管理ViewFlipper的方法:

results?.eachWithIndex { output, i->
                    if (i>0) {
                        sb.append(" or ")
                    }
                    sb.append(" ((dbres.Field like (:myVariablesA${i})) or (dbres.Field like (:myVariablesB${i})) or (dbres.Field like (:myVariablesC${i})) or dbres.Field=:myVariable${i})")
                    //capture within csv so aa,val,bb
                    myParams."myVariablesA${i}"='%,'+output+',%'
                    //capture as last element: aa,val
                    myParams."myVariablesB${i}"='%,'+output
                    //capture it as first element val,aa
                    myParams."myVariablesC${i}"=output+',%'
                    //finally capture it if its not a csv and its a physical set value
                    myParams."myVariable${i}"=output
                }

每次在ViewPager中更改页面时都会调用该方法。

private void changeBackground(int position) {

    switch (position) {

        case 1:
            mViewFlipper.setDisplayedChild(1);
            mViewFlipper.setInAnimation(getActivity(), R.anim.anim_clockwise_onboarding);
            mViewFlipper.setOutAnimation(getActivity(), R.anim.anim_clockwise_inverse_onboarding);
            break;

        case 2:
            mViewFlipper.setDisplayedChild(2);
            mViewFlipper.setInAnimation(getActivity(), R.anim.anim_clockwise_onboarding);
            mViewFlipper.setOutAnimation(getActivity(), R.anim.anim_clockwise_inverse_onboarding);
            break;

        case 3:
            mViewFlipper.setDisplayedChild(3);
            mViewFlipper.setInAnimation(getActivity(), R.anim.anim_clockwise_onboarding);
            mViewFlipper.setOutAnimation(getActivity(), R.anim.anim_clockwise_inverse_onboarding);
            break;

        default:
            mViewFlipper.setDisplayedChild(0);
            mViewFlipper.setInAnimation(getActivity(), R.anim.anim_clockwise_onboarding);
            mViewFlipper.setOutAnimation(getActivity(), R.anim.anim_clockwise_inverse_onboarding);
            break;

    }

}

如果有任何想法,请帮助我,提前致谢。

1 个答案:

答案 0 :(得分:2)

为此你需要使用Image loader库来加载图像。 您可以使用:

  1. 通用图片加载器
  2. 毕加索
  3. 滑翔
  4. 此库用于位图内存管理,使用此库后,您没有遇到OutOfMemoryError异常。