android通用图像加载程序清除缓存
我使用通用图像加载器从url加载图像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
这是适配器
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错误。要避免“已初始化”消息将您的配置部分放入扩展应用程序的类中,而不是扩展您的活动。我不明白,您能解释它吗?