本文主要是介绍android中图片内存缓存的工具类的实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
android中实现图片缓存的工具类的实现:package com.demo.loading;import java.lang.ref.SoftReference;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.concurrent.ConcurrentHashMap;import android.graphics.Bitmap;/***** 内存中的缓存****/
public class ImageMemoryCache {private static final int HARD_CACHE_CAPACITY = 30;private HashMap<String, Bitmap> mHardBitmapCache;private final static ConcurrentHashMap<String, SoftReference<Bitmap>> mSoftBitmapCache =new ConcurrentHashMap<String, SoftReference<Bitmap>>(HARD_CACHE_CAPACITY / 2);public ImageMemoryCache() {mHardBitmapCache = new LinkedHashMap<String, Bitmap>(HARD_CACHE_CAPACITY / 2, 0.75f, true) {private static final long serialVersionUID = 1L;@Overrideprotected boolean removeEldestEntry(LinkedHashMap.Entry<String, Bitmap> eldest) {if (size() > HARD_CACHE_CAPACITY) {// Entries push-out of hard reference cache are transferred// to soft reference cachemSoftBitmapCache.put(eldest.getKey(),new SoftReference<Bitmap>(eldest.getValue()));return true;} elsereturn false;}};}/*** 从缓存中获取图片*/public Bitmap getBitmapFromCache(String url) {// 先从mHardBitmapCache缓存中获取synchronized (mHardBitmapCache) {final Bitmap bitmap = mHardBitmapCache.get(url);if (bitmap != null) {// 如果找到的话,把元素移到linkedhashmap的最前面,从而保证在LRU算法中是最后被删除mHardBitmapCache.remove(url);mHardBitmapCache.put(url, bitmap);return bitmap;}}// 如果mHardBitmapCache中找不到,到mSoftBitmapCache中找SoftReference<Bitmap> bitmapReference = mSoftBitmapCache.get(url);if (bitmapReference != null) {final Bitmap bitmap = bitmapReference.get();if (bitmap != null) {// 将图片移回硬缓存mHardBitmapCache.put(url, bitmap);mSoftBitmapCache.remove(url);return bitmap;} else {mSoftBitmapCache.remove(url);}}return null;}/*** 添加图片到缓存 ***/public void addBitmapToCache(String url, Bitmap bitmap) {if (bitmap != null) {synchronized (mHardBitmapCache) {mHardBitmapCache.put(url, bitmap);}}}
}
这篇关于android中图片内存缓存的工具类的实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!