图片的三级缓存是指网络缓存,本地缓存,以及内存缓存。
从获得数据的顺序上将,显示网络缓存得到数据,紧接着存入本地缓存,在使用是放入内存缓存。
分别介绍三个缓存方式:
1 网络缓存
网络缓存最重要的是使用AsyncTask自定义bitmapTask,
AsyncTask三个重要的函数:
doInBackground:后台耗时方法,子线程中进行
onPostExecute:doInBackground结束后,执行该方法,主线程中运行的
onProgressUpdate:更新进度,在主线程中进行调用
主要思想是后台异步下载,得到结果之后在主线程中进行更新。
package com.example.zhihuibj.utils.bitmap;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import com.lidroid.xutils.HttpUtils;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.widget.ImageView;
/*
* 网络缓存
*
*/
public class NetCacheUtils {
/*
*
*/
private MyLoaclCacheUtils mLocalCacheUtils;
private MemoryCacheUtils mMemoryCacheUtils;
public NetCacheUtils(MyLoaclCacheUtils LocalCacheUtils, MemoryCacheUtils MemoryCacheUtils) {
mLocalCacheUtils=LocalCacheUtils;
mMemoryCacheUtils=MemoryCacheUtils;
}
public void getBitmapFromNet(ImageView ivPic, String url) {
new BitmapTask().execute(ivPic,url);// 传入的参数在doInBackground中获取,启动AsyncTask
}
/*
* 第一个参数:doInBackground 参数
* 第二个参数:onProgressUpdate 参数
* 第三个参数:onPostExecute 参数
*/
class BitmapTask extends AsyncTask<Object, Void, Bitmap>{
private ImageView ivPic;
private String url;
/*
* 后台耗时方法,子线程中进行