ImageContainer重复添加,以及Map<String,Object>遍历

今天遇到一个问题,ImageContainer一直重复添加。就下拉了几页,图片数据多了好几倍。我在想,假如我要一直下拉查看图片,会不会报out of memory(OOM)。

原来代码:

<span style="white-space:pre">	</span>private List<ImageContainer> mImageContainers = new ArrayList<ImageLoader.ImageContainer>();

<span style="white-space:pre">	</span>ImageContainer container = mImageLoader.get(url, listener,
                    Tools.converToCompatiblePx(mParentActivity, 790),
                    Tools.converToCompatiblePx(mParentActivity, 340));
        if(!mImageContainers.contain(container))
<span style="white-space:pre">		</span>mImageContainers.add(container);

<span style="white-space:pre">	</span>//回收图片缓存
<span style="white-space:pre">	</span>for (ImageContainer container : mImageContainers) {
                container.cancelRequest();
                String url = container.getRequestUrl();
                if (url.contains(Constants.HOST)) {
                    url = url.replace(Constants.HOST, "");
                }
                ImageView imageView = (ImageView) mImageLinearLayout
                        .findViewWithTag(url);
                if (imageView != null) {
                    imageView.setImageDrawable(null);
                }
                if (container.getBitmap() != null) {
                    container.getBitmap().recycle();
                }
            }
<span style="white-space:pre">	</span>mImageContainers.clear();


然后我想用mImageContainers.contain(container);判断ArrayList之中是否包含container,发现因为List<T>当中的类型是一个类,无法进行判断,要么去重写Equal()和hashCode()。又觉得太麻烦了,没办法,我只能把List类型换成Map。

修改后代码:

<span style="white-space:pre">	</span>private HashMap<String,ImageContainer> mImageContainers = new HashMap<>();
<span style="white-space:pre">	</span>ImageContainer container = mImageLoader.get(url, listener,
                    Tools.converToCompatiblePx(mParentActivity, 790),
                    Tools.converToCompatiblePx(mParentActivity, 340));
        boolean contain = mImageContainers.containsKey(container.getRequestUrl());
        if(!contain)
            mImageContainers.put(container.getRequestUrl(),container);
<span style="white-space:pre">	</span>//回收图片缓存
<span style="white-space:pre">	</span>List<HashMap<String,ImageContainer>> list = new ArrayList<HashMap<String,ImageContainer>>();
        list.add(mImageContainers);
        for (Map<String,ImageContainer> map : list){
            for (String k : map.keySet()) {
                ImageContainer container = map.get(k);
                container.cancelRequest();
                String url = container.getRequestUrl();
                if (url.contains(Constants.HOST)) {
                    url = url.replace(Constants.HOST, "");
                }
                ImageView imageView = (ImageView) mImageLinearLayout
                        .findViewWithTag(url);
                if (imageView != null) {
                    imageView.setImageDrawable(null);
                }
                if (container.getBitmap() != null) {
                    container.getBitmap().recycle();
                }
            }
        }

        mImageContainers.clear();




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值