当前位置: 移动技术网 > IT编程>移动开发>Android > Android实现ListView异步加载的方法(改进版)

Android实现ListView异步加载的方法(改进版)

2019年07月24日  | 移动技术网IT编程  | 我要评论

本文实例讲述了android实现listview异步加载的方法。分享给大家供大家参考,具体如下:

@override
   public view getview(int position, view convertview, viewgroup parent) {
         …………
     viewholder vh = null;
         …………
      vh.mimageview.settag(position);
      vh.mthumb.setimagedrawable(imageloader.loaddrawable(position,
        new imagecallback() {
          public void imageloaded(drawable imagedrawable, int position) {
            imageview imageviewbytag = (imageview) mlist.findviewwithtag(position);
            if (imageviewbytag != null) {
              imageviewbytag.setimagedrawable(imagedrawable);
              }
            }
         }));
  }
  private static lrucache<long, drawable> mcache = new lrucache<long, drawable>(100);
  public class asyncimageloader {
    public drawable loaddrawable(final int position, final imagecallback callback){
      drawable d = null;
      d = mcache.get(position);
      if (d == null) {
        final handler handler=new handler(){
          @override
          public void handlemessage(message msg) {
            callback.imageloaded((drawable) msg.obj, position);
          }
        };
        thread t = new thread(){
          public void run() {
            drawable drawable = utils.getdrawable(mcontext, position, 1, mmydefaulticon);
            drawable value = 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();
        return mmydefaulticon;
      } else {
        return d;
      }
    }
  }
  public interface imagecallback{
    public void imageloaded(drawable imagedrawable, int position);
  }

这个是在前面一篇基础上修改的。主要为了加入lrucache

后来发现,这种方法要不停的开辟新的线程,效率并不是很高。最后改为加入一后台线程,不停从后进先出队列中取出任务进行处理。

更多关于android相关内容感兴趣的读者可查看本站专题:《android视图view技巧总结》、《android编程之activity操作技巧总结》、《android操作sqlite数据库技巧总结》、《android操作json格式数据技巧总结》、《android数据库操作技巧总结》、《android文件操作技巧汇总》、《android编程开发之sd卡操作方法汇总》、《android开发入门与进阶教程》、《android资源操作技巧汇总》及《android控件用法总结

希望本文所述对大家android程序设计有所帮助。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网