解決viewpager+glide檢視大圖OOM的問題
阿新 • • 發佈:2018-11-07
之前用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); } }