1. 程式人生 > >解決viewpager+glide檢視大圖OOM的問題

解決viewpager+glide檢視大圖OOM的問題

之前用viewpager+glide檢視大圖的時候,滑動圖片太快會造成OOM,現在做了優化,效果還可以。
解決方案就是在 destroyItem(ViewGroup container,int position, Object object) 方法下加入Glide.clear(view);
完整程式碼如下:

public class LargePicturesPargeAdapter extends PagerAdapter {
    @Inject
    RxBus mRxBus;
    private List<String> allPicturePaths;
    private Context mContext;
    public LargePicturesPargeAdapter(Context context, List<String> allPicturePaths) {
        mContext = context;
        this.allPicturePaths = allPicturePaths;
    }

    @Override
    public int getCount() {
        return allPicturePaths.size();
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == object;
    }

    /**
     * 必須要實現的方法
     * 每次滑動的時例項化一個頁面,ViewPager同時載入3個頁面,假如此時你正在第二個頁面,向左滑動,
     * 將例項化第4個頁面
     **/
    @Override
    public Object instantiateItem(ViewGroup container, final int position) {
        // TODO Auto-generated method stub
        ImageView imageView = new ImageView(mContext);
        ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
        imageView .setLayoutParams(layoutParams);
        ((ViewPager) container).addView(imageView);
        Glide.with(mContext)
                .load(new File(allPicturePaths.get(position)))
                .override(Constants.SCREEN_WIDTH, Constants.SCREEN_HEIGHT)
                .centerCrop()
                .crossFade()
                .into(imageView);
        return imageView;
    }

    /**
     * 必須要實現的方法
     * 滑動切換的時銷燬一個頁面,ViewPager同時載入3個頁面,假如此時你正在第二個頁面,向左滑動,
     * 將銷燬第1個頁面
     */
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        // TODO Auto-generated method stub;
        ImageView imageView = (PhotoView) object;
        if (imageView == null)
            return;
        Glide.clear(imageView);		//核心,解決OOM
        ((ViewPager) container).removeView(imageView);
    }
}