android通用图像加载程序清除缓存

android通用图像加载程序清除缓存,android,universal-image-loader,Android,Universal Image Loader,我使用通用图像加载器从url加载图像 这是适配器 public class BinderDataImg extends BaseAdapter { static final String KEY_IMG = "img"; LayoutInflater inflater; List<HashMap<String,String>> imgHashmap; ViewHolder holder; ImageLoader imageLoader = ImageLoader.ge

我使用通用图像加载器从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;
}
公共类BinderDataImg扩展了BaseAdapter{
静态最终字符串键\u IMG=“IMG”;
充气机;
列出imgHashmap;
视窗座;
ImageLoader ImageLoader=ImageLoader.getInstance();
公共BinderDataImg(活动法案,列表地图){
this.imgHashmap=map;
充气机=(充气机)法
.getSystemService(上下文布局\充气机\服务);
}
public int getCount(){
//TODO自动生成的方法存根
返回imgHashmap.size();
}
公共对象getItem(int arg0){
//TODO自动生成的方法存根
返回null;
}
公共长getItemId(int位置){
//TODO自动生成的方法存根
返回0;
}
公共视图getView(int位置、视图转换视图、视图组父视图){
视图vi=转换视图;
if(convertView==null){
vi=充气机充气(R.layout.list\u img,空);
holder=新的ViewHolder();
holder.iv_img=(ImageView)vi.findViewById(R.id.imageViewImg);
vi.setTag(支架);
}
否则{
holder=(ViewHolder)vi.getTag();
}
字符串uri=imgHashmap.get(位置).get(键\u IMG);
imageLoader.displayImage(uri,holder.iv_img);
返回vi;
}
静态类视窗夹{
ImageView iv_img;
}
}

这就是活动

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();
    }
}
List imgList=null;
DisplayImageOptions defaultOptions=新建DisplayImageOptions.Builder()
.cacheOnDisk(true).cacheInMemory(true)
.imageScaleType(imageScaleType.Justice)
.bitmapConfig(Bitmap.Config.RGB_565)
.ResetViewBefore加载(真)
.显示器(新FadeInBitmapDisplayer(300))
.showImageForEmptyUri(R.drawable.hinh_错误)
.showImageOnFail(R.drawable.hinh_互联网)
.showImageOnLoading(R.可拉深。hinh_装载)
.build();
ImageLoaderConfiguration配置=新建ImageLoaderConfiguration.Builder(getApplicationContext())
.defaultDisplayImageOptions(默认选项)
.memoryCache(新的WeakMemoryCache())
.线程池大小(3)
.diskCacheSize(100*1024*1024)
.build();
ImageLoader.getInstance().init(配置);
最终CustomListView lvi=(CustomListView)findViewById(R.id.listViewHinh);
试一试{
XmlPullParser=新的XmlPullParser();
imgList=parser.parse(getAssets().open)(文件\u xml);
BinderDataImg binderdata=新的BinderDataImg(此,imgHashmap);
lvi.setAdapter(binderdata);
}捕获(IOE异常){
e、 printStackTrace();
}
}
我可以在内存和磁盘中加载图像和图像缓存。
但我想知道何时“活动开始缓存”将清除,或者何时按“上一步”按钮离开“活动”将删除内存中的缓存和磁盘中的缓存。
怎么做?
对不起,我的英语不好

感谢阅读。

您可以使用
DiskCacheUtils
MemoryCacheUtils
按图像url删除特定图像

DiskCacheUtils.removeFromCache(imageUrl, ImageLoader.getInstance().getDiskCache());    
MemoryCacheUtils.removeFromCache(imageUrl, ImageLoader.getInstance().getMemoryCache());
或者完全清除缓存

ImageLoader.getInstance().clearMemoryCache()
ImageLoader.getInstance().clearDiskCache()
要在创建活动时清除缓存,可以在初始化
ImageLoader


要在离开活动时清除缓存,可以调用
ondestory()中的方法
,但我应该记住,系统可以在不调用此方法的情况下终止您的活动。

ImageLoader类有两种清除缓存的方法:
clearMemoryCache
clearDiscCache
。在活动中调用它们
onDestroy
方法将完成您正在寻找的任务。

您不需要自己清除缓存,be因为系统将为您提供此功能you@thunder413:是吗?@chintan soni:我已经看到了,但它并不完全是我找到的解决方案,而是ImageLoader.getInstance().init(config)之后的第二个解决方案;在活动中?您应该查看提示4,但当再次加载活动时,日志cat show尝试初始化之前已初始化的ImageLoader。要使用new重新初始化ImageLoader。这是什么?以及一些图像加载和OutOfMemory错误。要避免“已初始化”消息将您的配置部分放入扩展
应用程序的类中,而不是扩展您的活动。我不明白,您能解释它吗?