java三级缓存代码 java一级缓存二级缓存和三级缓存的区别

安卓开发Xutils.Bitmap怎么实现的三级缓存网络缓存
网络拉取图片严格来讲不能称之为缓存,实质上就是下载url对应的图片 , 我们这里姑且把它看作是缓存的一种 。仿照BitmapUtil中的display方法 , 我自己定制的CustomBitmapUtils也定义这个方法,根据传入的url,将图片设置到ivPic控件上 。
[java] view plain copy
public void display(ImageView ivPic, String url) {
}
定义网络缓存的工具类,在访问网络的时候 , 我使用了AsyncTask来实现 , 在AsyncTask的doInBackGround方法里下载图片 , 然后将 图片设置给ivPic控件,AsyncTask有三个泛型 , 其中第一个泛型是执行异步任务的时候,通过execute传过来的参数,第二个泛型是更新的进度,第三个泛型是异步任务执行完成之后,返回来的结果,我们这里返回一个Bitmap 。具体的下载实现代码如下:
[java] view plain copy
pre name="code" class="java"/**
* 网络缓存的工具类
*
* @author ZHY
*
*/
public class NetCacheUtils {
private LocalCacheUtils localCacheUtils;
private MemoryCacheUtils memoryCacheUtils;
public NetCacheUtils() {
localCacheUtils = new LocalCacheUtils();
memoryCacheUtils = new MemoryCacheUtils();
}
/**
* 从网络下载图片
*
* @param ivPic
* @param url
*/
public void getBitmapFromNet(ImageView ivPic, String url) {
// 访问网络的操作一定要在子线程中进行 , 采用异步任务实现
MyAsyncTask task = new MyAsyncTask();
task.execute(ivPic, url);
}
/**
* 第一个泛型--异步任务执行的时候,通过execute传过来的参数; 第二个泛型--更新进度; 第三个泛型--异步任务执行以后返回的结果
*
* @author ZHY
*
*/
private class MyAsyncTask extends AsyncTaskObject, Void, Bitmap {
private ImageView ivPic;
private String url;
// 耗时任务执行之前 --主线程
@Override
protected void onPreExecute() {
super.onPreExecute();
}
// 后台执行的任务
@Override
protected Bitmap doInBackground(Object... params) {
// 执行异步任务的时候,将URL传过来
ivPic = (ImageView) params[0];
url = (String) params[1];
Bitmap bitmap = downloadBitmap(url);
// 为了保证ImageView控件和URL一一对应,给ImageView设定一个标记
ivPic.setTag(url);// 关联ivPic和URL
return bitmap;
}
// 更新进度 --主线程
@Override
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
}
// 耗时任务执行之后--主线程
@Override
protected void onPostExecute(Bitmap result) {
String mCurrentUrl = (String) ivPic.getTag();
if (url.equals(mCurrentUrl)) {
ivPic.setImageBitmap(result);
System.out.println("从网络获取图片");
// 从网络加载完之后,将图片保存到本地SD卡一份,保存到内存中一份
localCacheUtils.setBitmap2Local(url, result);
// 从网络加载完之后 , 将图片保存到本地SD卡一份,保存到内存中一份
memoryCacheUtils.setBitmap2Memory(url, result);
}
}
}
/**
* 下载网络图片
*
* @param url
* @return
*/
private Bitmap downloadBitmap(String url) {
HttpURLConnection conn = null;
try {
URL mURL = new URL(url);
// 打开HttpURLConnection连接
conn = (HttpURLConnection) mURL.openConnection();
// 设置参数
conn.setConnectTimeout(5000);
conn.setReadTimeout(5000);
conn.setRequestMethod("GET");
// 开启连接
conn.connect();
// 获得响应码

推荐阅读