大家都知道为ViewPager构建适配器继承PagerAdapter。Viewpager会默认加载当前页和当前页的左右两页。一开始当前页是下标0,所以一开始默认加载第0页(指下标,下同)和第1页。当你向右滑动,当前页为第1页时,ViewPager会加载第2页,这时一共有3页存在(第0,1,2页)。再向右滑动,当前页为第2页时,会移除第0页,加载第3页,同理向左滑动当前页为第1页时,会移除第3页。所以做好回收,在回收方法里回收bitmap资源。
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
View v = (View)object;
if (v==null)
return;
ImageView iv = (ImageView) v.findViewById(R.id.iv_list);
releaseImageViewResourse(iv);
container.removeView(v);
}
private void releaseImageViewResourse(ImageView iv) {
if (iv == null)
return;
Drawable drawable = iv.getDrawable();
if (drawable != null && drawable instanceof BitmapDrawable) {
BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;
Bitmap bitmap = bitmapDrawable.getBitmap();
if (bitmap != null && !bitmap.isRecycled()) {
bitmap.recycle();
bitmap = null;
}
}
//希望做一次垃圾回收
System.gc();
}
2、图片资源在<span style="font-family: 微软雅黑, 'microsoft yahei', Arial, Helvetica, sans-serif, Tahoma, Verdana, simsun, sans-serif;">instantiateItem方法中</span><span style="font-family: 微软雅黑, 'microsoft yahei', Arial, Helvetica, sans-serif, Tahoma, Verdana, simsun, sans-serif;">动态加载</span>
3、下面这个方法返回false的话不显示view<pre name="code" class="java">@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == (arg1);
}