Android实现ListView异步加载的方法(改进版)
本文实例讲述了Android实现ListView异步加载的方法。分享给大家供大家参考,具体如下:
@Override
publicViewgetView(intposition,ViewconvertView,ViewGroupparent){
…………
ViewHolderVH=null;
…………
VH.mImageView.setTag(position);
VH.mThumb.setImageDrawable(imageLoader.loadDrawable(position,
newImageCallback(){
publicvoidimageLoaded(DrawableimageDrawable,intposition){
ImageViewimageViewByTag=(ImageView)mList.findViewWithTag(position);
if(imageViewByTag!=null){
imageViewByTag.setImageDrawable(imageDrawable);
}
}
}));
}
privatestaticLruCache<Long,Drawable>mCache=newLruCache<Long,Drawable>(100);
publicclassAsyncImageLoader{
publicDrawableloadDrawable(finalintposition,finalImageCallbackcallback){
Drawabled=null;
d=mCache.get(position);
if(d==null){
finalHandlerhandler=newHandler(){
@Override
publicvoidhandleMessage(Messagemsg){
callback.imageLoaded((Drawable)msg.obj,position);
}
};
Threadt=newThread(){
publicvoidrun(){
Drawabledrawable=Utils.getDrawable(mContext,position,1,mMyDefaultIcon);
Drawablevalue=mCache.get(position);//cache有可能已经被更改了,所以重新取一次
if(value==null){
mCache.put(position,drawable);
}else{
drawable=value;
}
handler.sendMessage(handler.obtainMessage(0,drawable));
};
};
t.setPriority(Thread.MIN_PRIORITY);
t.start();
returnmMyDefaultIcon;
}else{
returnd;
}
}
}
publicinterfaceImageCallback{
publicvoidimageLoaded(DrawableimageDrawable,intposition);
}
这个是在前面一篇https://www.nhooo.com/article/90408.htm基础上修改的。主要为了加入LruCache
后来发现,这种方法要不停的开辟新的线程,效率并不是很高。最后改为加入一后台线程,不停从后进先出队列中取出任务进行处理。
更多关于Android相关内容感兴趣的读者可查看本站专题:《Android视图View技巧总结》、《Android编程之activity操作技巧总结》、《Android操作SQLite数据库技巧总结》、《Android操作json格式数据技巧总结》、《Android数据库操作技巧总结》、《Android文件操作技巧汇总》、《Android编程开发之SD卡操作方法汇总》、《Android开发入门与进阶教程》、《Android资源操作技巧汇总》及《Android控件用法总结》
希望本文所述对大家Android程序设计有所帮助。
热门推荐
7 简短的二胎祝福语
10 简短霸气女儿生日 祝福语
11 祝福语高考小众诗句简短
12 元旦祝福语20秒简短
13 老师过年祝福语大全 简短
14 一生祝福语简短
15 产检祝福语简短霸气
16 朋友店开张祝福语简短
17 生日爱情祝福语大全简短
18 朋友女儿生日祝福语 简短