ListView网络加载终极优化

加载网络图片的优化

1.在你滑动listView的时候如果前面的图片没加载完成,这是你滑动到后边,前面的convertView会复用给后边,后边的convertView会先加载前面的图片在加载自己的图片。
为了图片不跳动,做以下优化

2.图片bitmap 大小 = 长*宽*4
非常耗费内存资源,所以有Lru算法,将访问时间离当前最远的会被释放掉

在AsyncTask里

  protected void onPreExecute() {
        super.onPreExecute();
        //设置Tag
        ImageLoader loader = (ImageLoader) image.getTag();
        if (loader != null) {
            loader.cancel(false);//cancel不打断,执行doInBackground
        }
        image.setTag(this);

        image.setImageResource(R.mipmap.coming);
    }
 @Override
    protected void onPostExecute(Bitmap bitmap) {//如果tag不为空不执行此方法
        super.onPostExecute(bitmap);
        if (bitmap != null) {
            image.setImageBitmap(bitmap);
             ImageUtil.cache.put(url, bitmap);//放入到cache中
        } else {
            image.setImageResource(R.mipmap.ic_launcher);
        }
        image.setTag(null);//在此处如果tag为空,图片加载上之后 设置tag为空
    }

    @Override
    protected void onCancelled(Bitmap bitmap) {
        //如果tag不为空执行到此方法,
        if (bitmap != null) {//如果bitmap不为空 放入cache
            ImageUtil.cache.put(url, bitmap);
        }
    }

Lru

package com.jash.networklibrary;

import android.graphics.Bitmap;
import android.support.v4.util.LruCache;
import android.widget.ImageView;

/**
 * Created by hasee on 2016/9/2.
 */
public class ImageUtil {
    /*
    *存进去去的时候可能会被释放掉取不到
     */
    static LruCache<String, Bitmap> cache = new LruCache<String,Bitmap>(10 << 20) {
        @Override
        protected int sizeOf(String key, Bitmap value) {//图片的大小所占内存设定为10M
//            int byteCount = value.getByteCount(); API12
            int bytes = value.getRowBytes() * value.getHeight();
            return bytes;

        }
    };

    public static void loadImage(ImageView image,String url) {
        Bitmap bitmap = cache.get(url);
        if (bitmap != null) {
            image.setImageBitmap(bitmap);
        } else {
            new ImageLoader(image).execute(url);
        }
    }
}

在适配器中加载

  new ImageUtil().loadImage(holder.imageView, entry.getImgURL()); //通过图片地址获取到图片,显示到ImageView上
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值