android通用图像加载器清除缓存

时间:2016-04-28 09:39:41

标签: android universal-image-loader

我使用通用图像加载程序从网址加载图像 这是适配器

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;
}

}

这是活动

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();
    }
}

我可以在内存中加载图像和图像缓存,磁盘也很完美 但我希望当活动开始缓存清除或按回按钮离开活动时将删除内存中的缓存并缓存在磁盘中 怎么做?
抱歉我的英语不好 感谢阅读。

2 个答案:

答案 0 :(得分:7)

您可以使用DiskCacheUtilsMemoryCacheUtils按图片网址删除特定图片

DiskCacheUtils.removeFromCache(imageUrl, ImageLoader.getInstance().getDiskCache());    
MemoryCacheUtils.removeFromCache(imageUrl, ImageLoader.getInstance().getMemoryCache());

或完全清理缓存

ImageLoader.getInstance().clearMemoryCache()
ImageLoader.getInstance().clearDiskCache()

要在创建活动时清除缓存,您可以在初始化ImageLoader

后调用此方法

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

答案 1 :(得分:0)

ImageLoader类有两种清除缓存的方法:clearMemoryCacheclearDiscCache。在活动中调用它们onDestroy方法将执行您要查找的内容。