Android实现ListView异步加载的方法(改进版)
作者:Hecker385 发布时间:2023-11-24 12:08:49
标签:Android,ListView,异步加载
本文实例讲述了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);
}
这个是在前面一篇https://www.jb51.net/article/90408.htm基础上修改的。主要为了加入LruCache
后来发现,这种方法要不停的开辟新的线程,效率并不是很高。最后改为加入一后台线程,不停从后进先出队列中取出任务进行处理。
希望本文所述对大家Android程序设计有所帮助。


猜你喜欢
- 1.本文要解决的问题使用typora打开项目中的md文件2.预期效果选中文件,按下alt+t,调用typora打开此md文件3.IDEA配置
- GC的前世与今生虽然本文是以.NET作为目标来讲述GC,但是GC的概念并非才诞生不久。早在1958年,由鼎鼎大名的图林奖得主John McC
- 堆排序介绍:堆排序可以分为两个阶段。在堆的构造阶段,我们将原始数组重新组织安排进一个堆中;然后在下沉排序阶段,我们从堆中按顺序取出所有元素并
- 一、背景当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统、银行系
- 什么是AppWidget?AppWidget就是我们平常在桌面上见到的那种一个个的小窗口,利用这个小窗口可以给用户提供一些方便快捷的操作。
- Lombok中@Builder用法1、建造者模式简介:Builder 使用创建者模式又叫建造者模式。简单来说,就是一步步创建一个对象,它对用
- 本文实例讲述了Android实现ListView控件的多选和全选功能。分享给大家供大家参考,具体如下:主程序代码MainActivity.J
- 何为高阶函数 大家可能对这个名词并不熟悉,但是这个名词所表达的事物却是我们经常使用到的。只要我们的函
- 1 引言伴随着信息技术的快速发展,近年来,人们的生活已经离不开计算机。生活娱乐几乎都是在计算机上进行的。其中的扫雷游戏就是之一。扫雷游戏是微
- 一. Window 分类应用 Window(ApplicationWindow: 对应一个 Acitivity)
- 在项目开发过程中,不可避免的会升级开发工具。这次我在旧项目版本升级到新版Unity2021.2.x时,出现Visual Studio无法定位
- 在本文中,我们将介绍二进制搜索相对于简单线性搜索的优势,并介绍它在 Java 中的实现。1. 需要有效的搜索假设我们在wine-sellin
- 在 Servlet/Jsp 项目中,如果涉及到系统任务,例如在项目启动阶段要做一些数据初始化操作,这些操作有一个共同的特点,只在项目启动时进
- 一、什么是泛型?为什么要使用泛型?泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型
- 本文实例讲述了Android TextView中文字通过SpannableString设置属性的方法。分享给大家供大家参考,具体如下:在An
- List集合概述List集合是一个元素有序(每个元素都有对应的顺序索引,第一个元素索引为0)、且可重复的集合。List集合常用方 * ist是
- 这篇文章主要介绍了简单了解Java中的可重入锁,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参
- jar包就指第三方提供的开源的API,这些API不属于JDK的,需要通过导入才能使用。添加和导入的区别注意:本文里的 导入 和 添加 jar
- C#剪切板Clipboard类我们现在先来看一下官方文档的介绍位于:System.Windows.Forms 命名空间下Provides m
- 背景为了了解Seata AT模式的原理,我通过源码解读的方式画出了Seata AT模式启动的图示:如果是基于Springboot项目的话,项