ViewPager加载多图时避免OOM

大家都知道为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);
    }


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值