安卓图片缓存

144

如何在从Web下载图像后对其进行缓存?

18个回答

3
考虑使用Universal Image Loader库,作者是Sergey Tarasevich。它提供以下功能:
  • 多线程加载图片,可以定义线程池大小
  • 内存、设备文件系统和SD卡中的图片缓存
  • 监听加载进度和事件的可能性

Universal Image Loader允许对下载的图片进行详细的缓存管理,具有以下缓存配置:

  • UsingFreqLimitedMemoryCache: 当缓存大小超过限制时,删除最不经常使用的位图。
  • LRULimitedMemoryCache: 当缓存大小超过限制时,删除最近最少使用的位图。
  • FIFOLimitedMemoryCache: 当缓存大小超过限制时,使用FIFO规则进行删除。
  • LargestLimitedMemoryCache: 当缓存大小超过限制时,删除最大的位图。
  • LimitedAgeMemoryCache: 当缓存对象的年龄超过定义的值时,删除缓存对象。
  • WeakMemoryCache: 仅具有对位图的弱引用的内存缓存。

一个简单的使用示例:

ImageView imageView = groupView.findViewById(R.id.imageView);
String imageUrl = "http://site.com/image.png"; 

ImageLoader imageLoader = ImageLoader.getInstance();
imageLoader.init(ImageLoaderConfiguration.createDefault(context));
imageLoader.displayImage(imageUrl, imageView);

这个例子使用默认的UsingFreqLimitedMemoryCache

当Universal Image Loader被频繁使用时,它将会导致很多内存泄漏。我怀疑这是因为代码中使用了单例(参见示例中的'getInstance()')。在加载了许多图片并旋转屏幕几次后,我的应用程序总是因为UIL中的OutOfMemoryErrors而崩溃。 这是一个很棒的库,但众所周知你绝不能使用单例,特别是在Android中... - Geert Bellemans
1
当你知道如何使用时,请使用单例模式! :) - Renetik

3
实际上对我起作用的是在我的主类上设置ResponseCache:
try {
   File httpCacheDir = new File(getApplicationContext().getCacheDir(), "http");
   long httpCacheSize = 10 * 1024 * 1024; // 10 MiB
   HttpResponseCache.install(httpCacheDir, httpCacheSize);
} catch (IOException e) { } 

并且。
connection.setUseCaches(true);

当下载位图时。 http://practicaldroid.blogspot.com/2013/01/utilizing-http-response-cache.html

能否在与httpresponsecache一起使用时使用lrucache? - iOSAndroidWindowsMobileAppsDev

2

1
已弃用。请查看BitmapFun。 - greg7gkb


1

我已经苦苦挣扎了一段时间;使用SoftReferences的答案会太快失去它们的数据。那些建议实例化RequestCache的答案太混乱了,而且我从来找不到一个完整的例子。

但是ImageDownloader.java对我来说非常有效。它使用HashMap直到容量达到或清除超时发生,然后将东西移动到SoftReference中,从而兼顾两者的优点。


0

0

1
我将此添加到 ListView 中,但它似乎无法很好地处理。是否有 ListViews 的特殊实现? - user901309

0
晚回答了,但我认为我应该添加一个链接到我的网站,因为我已经写了一个教程,如何为Android制作图像缓存:http://squarewolf.nl/2010/11/android-image-cache/ 更新:该页面已被下线,因为源代码已过时。我和@elenasys一样建议使用Ignition

所以对于所有遇到这个问题并且还没有找到解决方案的人们:希望你们喜欢!=D


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接