android 内存回收

做了一个动态展示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();
        }
    }
}
阅读 4.4k
2 个回答

为什么需要这个imgMap?还有你的releaseImageViewResource方法是怎样的?

不对吧,我记得ViewPager是可以限定展示页数的,不可见的就销毁了,怎么会释放不了内存呢?
当然用ViewPager的确很不科学

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏