在项目中,使用volley,用来与服务器交互,上传,下载,最近遇到一个问题:
在listview中显示网络图片,但每次都会重新刷新,调试发现问题出在BitmapLruCache
每次put的时候,都返回null, 个人认为关键问题是设计好cache的大小
public static void loadImageByVolley(String imageUrl, ImageView mImageView, ImageListener lis) { ImageLoader imageLoader = MyApplication.getInstance().getImageLoader(); if (null == lis) { ImageListener listener = ImageLoader.getImageListener(mImageView, R.drawable.app_icon_gray, R.drawable.app_icon_gray); imageLoader.get(imageUrl, listener); } else { imageLoader.get(imageUrl, lis); } return; }
MyApplication.java
public ImageLoader getImageLoader() { if (null == mImageLoader) { if (null == mBitmapLruCache) { int memClass = ((ActivityManager) getSystemService(Context.ACTIVITY_SERVICE)).getMemoryClass(); int cacheSize = 1024 * 1024 * (memClass / 4); mBitmapLruCache = new BitmapLruCache(cacheSize); } mImageLoader = new ImageLoader(getRequestQueue(), mBitmapLruCache); } return mImageLoader; }
BitmapLruCache.java
import android.graphics.Bitmap;import android.support.v4.util.LruCache;import com.android.volley.toolbox.ImageLoader;public class BitmapLruCache extends LruCacheimplements ImageLoader.ImageCache { public BitmapLruCache() { this((int) (Runtime.getRuntime().maxMemory() / 1024) / 8); } public BitmapLruCache(int sizeInKiloBytes) { super(sizeInKiloBytes); } @Override protected int sizeOf(String key, Bitmap bitmap) { int size = bitmap.getByteCount() / 1024; return size; } public boolean contains(String key) { return get(key) != null; } public Bitmap getBitmap(String key) { Bitmap bitmap = get(key); return bitmap; } public void putBitmap(String url, Bitmap bitmap) { put(url, bitmap); }}
自己也有很多模糊不懂的地方,欢迎大家来喷和讨论
参考网页: