在ListView中显示下载图像的最佳方式?

时间:2012-07-09 12:29:56

标签: java android performance

我目前正在使用自定义适配器在ListView中每行显示一个ImageView和两个TextView。

在重写的getView的getView中,我有ImageView的代码:

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();

downloadAvatar方法基本上只使用AndroidHttpClient和HttpGet。上面的方法有效,但我的问题是如何优化它?滚动是不稳定的;我知道它可能会调用getView()并在每次进入可视区域时下载图像。有什么提示吗?

4 个答案:

答案 0 :(得分:1)

请参阅下面的Lazy Loading listview的源链接和通用图像加载器示例,它可能对您有所帮助。

Lazy Loading Listview

Android Universal Image Loader

答案 1 :(得分:0)

在您的情况下,您需要执行所谓的“延迟加载图像”,这将在下载后缓存这些图像。看看这个:Lazy load of images in ListView

答案 2 :(得分:0)

我建议使用ignition-library,它有一个名为RemoteImageView的组件,它将加载异步的url图像,并且库也会保留这些图像的缓存,因此不会每次都下载它们是时候重新创建ListView行了。

我使用它,我发现它非常有用且强大。

答案 3 :(得分:0)

这是一个选项:

getView内查看您是否已下载当前图片。如果尚未下载 - 下载并将其存储在您选择的目录中。如果它存在于该目录中 - 只需加载它。

根据图像大小和数量,您还可以制作某种缓存来存储可见所需的图像对象(可能是可见的上方和下方最近看不见的)。