LruCache的工具类
public class LruCacheUtils {
//申明内存缓存
private LruCache<String,Bitmap> mLruCache;
//在构造方法中进行初使化
public LruCacheUtils(Context context) {
//得到当前应用程序的内存
int maxMemory=(int)Runtime.getRuntime().maxMemory();
//内存缓存为当前应用程序的8分之1
int cacheMemory=maxMemory/8;
//进行初使化
mLruCache=new LruCache<String, Bitmap>(cacheMemory){
@Override
protected int sizeOf(String key, Bitmap value) {
return value.getByteCount();//自定义bitmap数据大小的计算方式
}
};
}
/**
* 保存图片到内存缓存
* @param key 图片的url
* @param bitmap 图片
*/
public void savePicToMemory(String key,Bitmap bitmap){
try {
mLruCache.put(key,bitmap);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 通过key值得到缓存的图片
* @param key 图片的url地址
* @return Bitmap 或 null
*/
public Bitmap getPicFromMemory(String key){
Bitmap bitmap=null;
try {
//通过key获取图片
bitmap= mLruCache.get(key);
} catch (Exception e) {
e.printStackTrace();
}
return bitmap;
}
}
如何使用
imageView = findViewById(R.id.img);
btnDown = findViewById(R.id.btn_down);
//初使化内存缓存
lruCacheUtils = new LruCacheUtils(this);
//按钮的点击事件
btnDown.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//首先判断内存缓存中有没有
Bitmap bitmap=lruCacheUtils.getPicFromMemory(picUrl);
if(bitmap!=null){
Log.d("zzz","从内存缓存中获取");
imageView.setImageBitmap(bitmap);
}else {
Log.d("zzz","从网络中获取");
//进行网络下载图片
MyPicTask task=new MyPicTask();
task.execute(picUrl);
}
}
});
}
class MyPicTask extends AsyncTask<String,Void,Bitmap>{
@Override
protected Bitmap doInBackground(String... strings) {
try {
//使用HttpUrlConnection
URL url=new URL(strings[0]);
HttpURLConnection connection=(HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setReadTimeout(5000);
connection.setConnectTimeout(5000);
if(connection.getResponseCode()==200){
InputStream inputStream=connection.getInputStream();
return BitmapFactory.decodeStream(inputStream);
}
} catch (MalformedURLException e) {
e.printStackTrace();
}catch (IOException e){
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Bitmap bitmap) {
super.onPostExecute(bitmap);
imageView.setImageBitmap(bitmap);
//保存在内存缓存中
lruCacheUtils.savePicToMemory(picUrl,bitmap);
}
}