何时在ListView中加载图像?

时间:2013-07-10 11:22:16

标签: android listview

当我使用ListView时,多次调用getView() method。每次调用getView()时,我都会使用Asyc任务加载图像。我的意思是每次我重置图像都很烦人。

如何理解何时加载图片?

5 个答案:

答案 0 :(得分:0)

您应该通过存储在SD卡上来缓存已加载的图像,因此一旦您获得了副本,就无需再次下载。有许多可以为您完成工作的即用型课程,例如:

http://greendroid.cyrilmottier.com/reference/greendroid/widget/AsyncImageView.html

答案 1 :(得分:0)

你必须有两面旗帜。

如果您已经加载了图像,则表示如果是,则不执行任何操作。

如果您当前正在加载图片,则表示如果是,则不执行任何操作。

成员还将帮助您维护图像的状态。

您的代码应如下所示:

private boolean isLoading = false;
private boolean hasLoaded = false;

if(!hasLoaded){
       if(!isLoading){
          isLoading = true;
          //do async load
          //on positive completition callback set hasLoaded to true
          //on negative completition callback set isLoading to false
       }
}

答案 2 :(得分:0)

最好的解决方案之一是使用WeakReference创建图像缓存。这样,您可以将图像保留在内存中,只有当它们不在内存中时才需要从服务器加载。在该方法中,当系统遇到低内存情况时,将从存储器中移除图像。因此,您当前的活动将始终保持对位图所需的硬参考,并且图像缓存将保留对位图的弱引用。

以下参考链接将帮助您

http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html

http://www.codeproject.com/Articles/35152/WeakReferences-as-a-Good-Caching-Mechanism

答案 3 :(得分:0)

Volley library(谷歌制作)有一个非常直观的classView,可以有一个名为“NetworkImageView”的网址。

你应该检查一下并观看视频,因为他们表明使用asyncTask来做这件事非常烦人(加上asyncTask已知有大约255个左右的任务限制)。

用于设置网址,只需使用setImageUrl。

它也为加载阶段提供了一些有用的方法:setDefaultImageResId,setErrorImageResId。

它也应该有某种内置的缓存机制,但我没有读过很多,所以你可能想看看他们的样本。

这将消除对listView项目使用asyncTasks的需要。

关于排球的一个问题包括示例代码here

答案 4 :(得分:0)

您可以添加缓存图层,也可以选择预加载图像。缓存图像(确切地说Bitmap个对象)的一个好策略是使用一个名为LRU或最近最少使用的的策略。

Android支持库有一个名为LruCache的类,可以实现此策略。因此,例如,当您第一次下载/加载图像时,将其粘贴到缓存中。稍后,您可以先检查它是否已经在缓存中并从那里加载它。

对于预加载,一个好的经验法则是预加载前十个和后十个项目。