OOM

在最近的项目中,使用了ViewPager+ImageView进行图片的浏览,OOM的代码:

1
2
3
4
5
6
7
@Override
public Object instantiateItem(ViewGroup container, int position) {
Work.Att att = list.get(position);
PhotoView view = new PhotoView(container.getContext());
container.addView(view);
return view;
}

这样会重复的创建ImageView,可能没有被回收,所以解决的方案是创建一个全局的集合,让图片都放进去,在使用的时候根据位置进行设置不同的图片去展示

1
2
3
4
5
6
7
@Override
public Object instantiateItem(ViewGroup container, int position) {
Work.Att att = list.get(position);
PhotoView view = Application.getImageList().get(position);
container.addView(view);
return view;
}

####关键

但是这样同样会让Viewpager指针指向了这个集合中的ImageView,因此在onDestory中添加:viewpager.removeAllViews();