做了一个动态展示90张1920 * 1080图片的播放器。用的是ViewPager,图片是动态加载的,用到时候才加载进来。
但是加载进来以后内存无法回收,用了各种方法都无法解决。小弟愚笨,或许不该用ViewPager?我是因为ViewPager加动画容易才用的。大家有什么好的方法呢,或者帮我看看代码的问题。多谢。
Map<Integer, ImageView> imgMap = new HashMap<>();
class MyPagerAdapter extends PagerAdapter {
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(imgMap.get(position));
releaseImageViewResouce((ImageView) object);
Glide.clear((View) object);
imgMap.remove(position);
}
@Override
public int getCount() {
return paths.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public ImageView instantiateItem(ViewGroup container, int position) {
Log.e("SlideToShowView", "position--->" + position);
ImageView imageView = new ImageView(context);
Glide.with(context).load(paths.get(position)).into(imageView);
imgMap.put(position, imageView);
container.addView(imageView);
return imageView;
}
}
public static void releaseImageViewResouce(ImageView imageView) {
if (imageView == null) return;
Drawable drawable = imageView.getDrawable();
if (drawable != null && drawable instanceof BitmapDrawable) {
BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;
Bitmap bitmap = bitmapDrawable.getBitmap();
if (bitmap != null && !bitmap.isRecycled()) {
bitmap.recycle();
}
}
}
为什么需要这个imgMap?还有你的releaseImageViewResource方法是怎样的?