为了防止OOM,首先ViewPager的预缓存不要设置太多,不设置为1,建议不设置,只缓存一个。
一开始不懂ViewPagerde缓存机制,未解决OOM写了一个4个VIew的缓存才解决,其实不用这么麻烦,参考如下Adapter的写法就可以避免OOM的问题。项目中是展示手机中所有图片的demo,测试不会OOM了。
public class PagerAdapter extends android.support.v4.view.PagerAdapter {
private Context mContext;
private List<String> mData;
private LayoutInflater mInflater;
public PagerAdapter(Context context, List<String> data) {
mContext = context;
mData = data;
mInflater = LayoutInflater.from(mContext);
}
@Override
public int getCount() {
return mData.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
View view = mInflater.inflate(R.layout.pager_adapter_item, null, false);
ImageView imageView = (ImageView) view.findViewById(R.id.imageView);
Glide.with(mContext)
.load(mData.get(position))
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.into(imageView);
container.addView(view);
return view;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
}
demo地址 点击打开链接
https://github.com/xueqin123/viewpageroom