【问题标题】:When to Load image in ListView?何时在 ListView 中加载图像?
【发布时间】:2013-07-10 11:22:15
【问题描述】:

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

如何理解何时加载图片?

【问题讨论】:

标签: android listview


【解决方案1】:

您应该缓存加载的图像,即存储在 SD 卡上,因此一旦您在其中获得副本,就无需再次下载。有很多现成的类可以为您完成这项工作,例如:

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

【讨论】:

    【解决方案2】:

    你必须有两个标志。

    如果你已经加载了图像,如果是真的你什么都不做。

    如果您当前正在加载图像,则表示您什么都不做。

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

    您的代码应如下所示:

    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
           }
    }
    

    【讨论】:

      【解决方案3】:

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

      以下参考链接将为您提供帮助

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

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

      【讨论】:

      • 在 Dalvik 上使用弱引用进行缓存并不是一个好主意。 GC 非常积极地收集它们,您的缓存不会很有效。
      【解决方案4】:

      Volley library(由 google 制作)有一个非常直观的 imageView 类,它可以有一个 url ,称为 "NetworkImageView" 。

      您应该检查一下并观看视频,因为它们表明使用 asyncTask 执行此操作非常烦人(而且已知 asyncTask 有任务限制,大约 255 个左右)。

      要设置 url,只需使用 setImageUrl 。

      它也有一些用于加载阶段的有用方法: setDefaultImageResId , setErrorImageResId。

      它也应该有某种内置的缓存机制,但我没有阅读太多关于它的内容,所以你可能想查看他们的示例。

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

      我的一个关于凌空的问题包括一个示例代码,here

      【讨论】:

        【解决方案5】:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-10-23
          • 1970-01-01
          • 1970-01-01
          • 2012-09-17
          • 2012-08-19
          • 1970-01-01
          相关资源
          最近更新 更多