Java 在ListView中显示下载图像的最有效方法?
我目前正在使用一个自定义适配器在ListView中每行显示一个ImageView和两个TextView 在适配器的重写getView中,ImageView有以下代码:Java 在ListView中显示下载图像的最有效方法?,java,android,performance,Java,Android,Performance,我目前正在使用一个自定义适配器在ListView中每行显示一个ImageView和两个TextView 在适配器的重写getView中,ImageView有以下代码: final ImageView img = (ImageView) view.findViewById(R.id.rowImg); new Thread(new Runnable() { public void run() { final BitmapDrawable b = downloadAvatar
final ImageView img = (ImageView) view.findViewById(R.id.rowImg);
new Thread(new Runnable() {
public void run() {
final BitmapDrawable b = downloadAvatar(urlToDownload);
img.post(new Runnable() {
public void run() {
img.setImageDrawable(b);
}
});
}
}).start();
下载化身方法基本上只使用AndroidHttpClient和HttpGet。上述方法可行,但我的问题是如何优化它?滚动是起伏的;我知道它可能会调用getView()并在每次进入可视区域时下载图像。有什么提示吗?在您的情况下,您需要执行所谓的“延迟加载图像”操作,一旦下载,这些图像就会被缓存。检查此项:我建议使用,它有一个名为的组件,该组件将异步加载url图像,库还将保留这些图像的缓存,因此不会在每次重新创建
ListView
行时下载这些图像
我使用它,我发现它非常有用和健壮。请参见下面的延迟加载listview的源链接和通用图像加载程序示例,它可能会对您有所帮助 这里有一个选项: 在
getView
内部检查是否下载了当前图像。如果它还没有下载-下载它并将其存储在您选择的目录中。如果它存在于该目录中,只需加载它
根据图像大小和数量,您还可以创建某种缓存来存储可见对象所需的图像对象(可能是可见对象上方和下方最近的不可见对象)项目。如果你看过谷歌IO 2012视频。他们已经解决了完全相同的问题。考虑使用LRUCache来缓存图像。所以你不需要每次在用户滚动时下载它们。