android 通用图像加载器清除缓存
android universal image loader clear cache
我使用通用图像加载器从 url
加载图像
这是适配器
public class BinderDataImg extends BaseAdapter {
static final String KEY_IMG = "img";
LayoutInflater inflater;
List<HashMap<String,String>> imgHashmap;
ViewHolder holder;
ImageLoader imageLoader = ImageLoader.getInstance();
public BinderDataImg(Activity act, List<HashMap<String,String>> map) {
this.imgHashmap = map;
inflater = (LayoutInflater) act
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public int getCount() {
// TODO Auto-generated method stub
return imgHashmap.size();
}
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
public View getView(int position, View convertView, ViewGroup parent) {
View vi=convertView;
if(convertView==null){
vi = inflater.inflate(R.layout.list_img, null);
holder = new ViewHolder();
holder.iv_img =(ImageView)vi.findViewById(R.id.imageViewImg);
vi.setTag(holder);
}
else{
holder = (ViewHolder)vi.getTag();
}
String uri = imgHashmap .get(position).get(KEY_IMG);
imageLoader.displayImage(uri, holder.iv_img);
return vi;
}
static class ViewHolder{
ImageView iv_img;
}
}
这是activity
List<ClassImg> imgList = null;
DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder()
.cacheOnDisk(true).cacheInMemory(true)
.imageScaleType(ImageScaleType.EXACTLY)
.bitmapConfig(Bitmap.Config.RGB_565)
.resetViewBeforeLoading(true)
.displayer(new FadeInBitmapDisplayer(300))
.showImageForEmptyUri(R.drawable.hinh_error)
.showImageOnFail(R.drawable.hinh_internet)
.showImageOnLoading(R.drawable.hinh_loading)
.build();
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext())
.defaultDisplayImageOptions(defaultOptions)
.memoryCache(new WeakMemoryCache())
.threadPoolSize(3)
.diskCacheSize(100 * 1024 * 1024)
.build();
ImageLoader.getInstance().init(config);
final CustomListView lvi = (CustomListView)findViewById(R.id.listViewHinh);
try {
XmlPullParser parser = new XmlPullParser();
imgList = parser.parse(getAssets().open(file_xml);
BinderDataImg binderdata = new BinderDataImg(this, imgHashmap);
lvi.setAdapter(binderdata);
}catch(IOException e) {
e.printStackTrace();
}
}
我可以在内存和磁盘中加载图像和图像缓存,完美。
但我想当 activity 开始缓存时将清除或当按下后退按钮离开时 activity 将删除内存中的缓存和磁盘中的缓存。
怎么做?
抱歉我的英语不好
感谢阅读。
您可以使用 DiskCacheUtils
和 MemoryCacheUtils
逐个删除特定图像 url
DiskCacheUtils.removeFromCache(imageUrl, ImageLoader.getInstance().getDiskCache());
MemoryCacheUtils.removeFromCache(imageUrl, ImageLoader.getInstance().getMemoryCache());
或完全清理缓存
ImageLoader.getInstance().clearMemoryCache()
ImageLoader.getInstance().clearDiskCache()
要在 activity 创建时清除缓存,您可以在初始化 ImageLoader
后调用此方法
要在离开 activity 时清除缓存,您可以调用 onDestroy ()
中的方法,但我应该注意系统可以在不调用此方法的情况下杀死您的 activity。
ImageLoader class有两种清除缓存的方法:clearMemoryCache
和clearDiscCache
。在 activity onDestroy
方法中调用它们将满足您的需求。
我使用通用图像加载器从 url
加载图像
这是适配器
public class BinderDataImg extends BaseAdapter {
static final String KEY_IMG = "img";
LayoutInflater inflater;
List<HashMap<String,String>> imgHashmap;
ViewHolder holder;
ImageLoader imageLoader = ImageLoader.getInstance();
public BinderDataImg(Activity act, List<HashMap<String,String>> map) {
this.imgHashmap = map;
inflater = (LayoutInflater) act
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public int getCount() {
// TODO Auto-generated method stub
return imgHashmap.size();
}
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
public View getView(int position, View convertView, ViewGroup parent) {
View vi=convertView;
if(convertView==null){
vi = inflater.inflate(R.layout.list_img, null);
holder = new ViewHolder();
holder.iv_img =(ImageView)vi.findViewById(R.id.imageViewImg);
vi.setTag(holder);
}
else{
holder = (ViewHolder)vi.getTag();
}
String uri = imgHashmap .get(position).get(KEY_IMG);
imageLoader.displayImage(uri, holder.iv_img);
return vi;
}
static class ViewHolder{
ImageView iv_img;
}
}
这是activity
List<ClassImg> imgList = null;
DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder()
.cacheOnDisk(true).cacheInMemory(true)
.imageScaleType(ImageScaleType.EXACTLY)
.bitmapConfig(Bitmap.Config.RGB_565)
.resetViewBeforeLoading(true)
.displayer(new FadeInBitmapDisplayer(300))
.showImageForEmptyUri(R.drawable.hinh_error)
.showImageOnFail(R.drawable.hinh_internet)
.showImageOnLoading(R.drawable.hinh_loading)
.build();
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext())
.defaultDisplayImageOptions(defaultOptions)
.memoryCache(new WeakMemoryCache())
.threadPoolSize(3)
.diskCacheSize(100 * 1024 * 1024)
.build();
ImageLoader.getInstance().init(config);
final CustomListView lvi = (CustomListView)findViewById(R.id.listViewHinh);
try {
XmlPullParser parser = new XmlPullParser();
imgList = parser.parse(getAssets().open(file_xml);
BinderDataImg binderdata = new BinderDataImg(this, imgHashmap);
lvi.setAdapter(binderdata);
}catch(IOException e) {
e.printStackTrace();
}
}
我可以在内存和磁盘中加载图像和图像缓存,完美。
但我想当 activity 开始缓存时将清除或当按下后退按钮离开时 activity 将删除内存中的缓存和磁盘中的缓存。
怎么做?
抱歉我的英语不好
感谢阅读。
您可以使用 DiskCacheUtils
和 MemoryCacheUtils
逐个删除特定图像 url
DiskCacheUtils.removeFromCache(imageUrl, ImageLoader.getInstance().getDiskCache());
MemoryCacheUtils.removeFromCache(imageUrl, ImageLoader.getInstance().getMemoryCache());
或完全清理缓存
ImageLoader.getInstance().clearMemoryCache()
ImageLoader.getInstance().clearDiskCache()
要在 activity 创建时清除缓存,您可以在初始化 ImageLoader
要在离开 activity 时清除缓存,您可以调用 onDestroy ()
中的方法,但我应该注意系统可以在不调用此方法的情况下杀死您的 activity。
ImageLoader class有两种清除缓存的方法:clearMemoryCache
和clearDiscCache
。在 activity onDestroy
方法中调用它们将满足您的需求。