如何在从Web下载图像后对其进行缓存?
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
。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);
我建议使用IGNITION,这比Droid fu更好。
https://github.com/kaeppler/ignition
https://github.com/kaeppler/ignition/wiki/Sample-applications
我已经苦苦挣扎了一段时间;使用SoftReferences的答案会太快失去它们的数据。那些建议实例化RequestCache的答案太混乱了,而且我从来找不到一个完整的例子。
但是ImageDownloader.java对我来说非常有效。它使用HashMap直到容量达到或清除超时发生,然后将东西移动到SoftReference中,从而兼顾两者的优点。
虽然回答晚了,但我认为这个库可以帮助缓存图片: https://github.com/crypticminds/ColdStorage。
只需使用@LoadCache(R.id.id_of_my_image_view, "URL_to_downlaod_image_from)注释ImageView,它将负责下载图像并将其加载到ImageView中。您还可以指定占位符图像和加载动画。
有关注释的详细文档在此处: https://github.com/crypticminds/ColdStorage/wiki/@LoadImage-annotation
虽然回答有点晚了,但我写了一个 Android 图片管理器,可以透明地处理缓存(内存和磁盘)。 代码在 Github 上https://github.com/felipecsl/Android-ImageManager
所以对于所有遇到这个问题并且还没有找到解决方案的人们:希望你们喜欢!=D