参考阅读:
Glide多种组合使用方式记录–没有全部亲测,大家可以根据实际需要选用 Glide设计模式之工厂模式1【ModelLoaderFactory】 Glide设计模式之工厂模式2【DiskCache.Factory】 Glide工厂模式3【TransitionFactory】【Transition】 Glide设计模式之工厂模式4总结
DiskCache.Factory包路径:com.bumptech.glide.load.engine.cache.DiskCache com.bumptech.glide.load.engine.cache.DiskCache.Factory
/** An interface for writing to and reading from a disk cache. */
一种向磁盘缓存写入和从磁盘缓存读取数据的接口。
public interface DiskCache {
/** An interface for lazily creating a disk cache. */
接口惰性创建磁盘缓存。
interface Factory {
/** 250 MB of cache. */
int DEFAULT_DISK_CACHE_SIZE = 250 * 1024 * 1024;
String DEFAULT_DISK_CACHE_DIR = "image_manager_disk_cache";
/** Returns a new disk cache, or {@code null} if no disk cache could be created. */
返回一个新的磁盘缓存,如果不能创建磁盘缓存,则返回null。
@Nullable
DiskCache build();
}
下面是实现列表
- DiskCacheAdapter.Factory
- DiskLruCacheFactory
- ExternalCacheDiskCacheFactory
- ExternalPreferredCacheDiskCacheFactory
- InternalCacheDiskCacheFactory
包路径:com.bumptech.glide.load.engine.cache.DiskCacheAdapter.Factory
/** Default factory for {@link DiskCacheAdapter}. */
DiskCacheAdapter的默认工厂。
目前没有被调用
public static final class Factory implements DiskCache.Factory {
@Override
public DiskCache build() {
return new DiskCacheAdapter();
}
}
DiskLruCacheFactory
包路径:com.bumptech.glide.load.engine.cache.DiskLruCacheFactory
/**
* Creates an {@link com.bumptech.glide.disklrucache.DiskLruCache} based disk cache in the specified
* disk cache directory.
*
* If you need to make I/O access before returning the cache directory use the {@link
* DiskLruCacheFactory#DiskLruCacheFactory(CacheDirectoryGetter, long)} constructor variant.
*/
在指定的磁盘缓存目录下创建基于diskrucache的磁盘缓存。
如果你需要在返回缓存目录之前进行I/O访问,请使用DiskLruCacheFactory(CacheDirectoryGetter, long)构造函数变量。
// Public API.
@SuppressWarnings("unused")
public class DiskLruCacheFactory implements DiskCache.Factory {
。。。
很明显 这里有一个Lru(Least Recently Used)算法。这个在后面的篇章里会详细说明,让大家能做到看完LRU算法解析后能手写一个内存Lru算法过程。
ExternalCacheDiskCacheFactory包路径: com.bumptech.glide.load.engine.cache.ExternalCacheDiskCacheFactory
/**
* Creates an {@link com.bumptech.glide.disklrucache.DiskLruCache} based disk cache in the external
* disk cache directory.
*
* Images can be read by everyone when using external disk cache.
*
* @deprecated use {@link ExternalPreferredCacheDiskCacheFactory} instead.
*/
在外部磁盘缓存目录中创建基于DiskLruCache的磁盘缓存。
当使用外部磁盘缓存时,每个人都可以读取图像。
@deprecated使用{@link ExternalPreferredCacheDiskCacheFactory}代替。
// Public API.
@SuppressWarnings({"unused", "WeakerAccess"})
@Deprecated
public final class ExternalCacheDiskCacheFactory extends DiskLruCacheFactory {
。。。
已停用了,还是看ExternalPreferredCacheDiskCacheFactory
ExternalPreferredCacheDiskCacheFactory包路径:com.bumptech.glide.load.engine.cache.ExternalPreferredCacheDiskCacheFactory
/**
* Creates an {@link com.bumptech.glide.disklrucache.DiskLruCache} based disk cache in the external
* disk cache directory, which falls back to the internal disk cache if no external storage is
* available. If ever fell back to the internal disk cache, will use that one from that moment on.
*
* Images can be read by everyone when using external disk cache.
*/
在外部磁盘缓存目录中创建一个基于DiskLruCache的磁盘缓存,如果没有外部存储可用,则返回到内部磁盘缓存。如果曾经退回到内部磁盘缓存,将从那一刻起使用那一个。
当使用外部磁盘缓存时,每个都可以读取图像。
// Public API.
@SuppressWarnings({"unused", "WeakerAccess"})
public final class ExternalPreferredCacheDiskCacheFactory extends DiskLruCacheFactory {
。。。
这个代码量不多。就不占字数了
InternalCacheDiskCacheFactory包路径:com.bumptech.glide.load.engine.cache.InternalCacheDiskCacheFactory
/**
* Creates an {@link com.bumptech.glide.disklrucache.DiskLruCache} based disk cache in the internal
* disk cache directory.
*/
在内部磁盘缓存目录中创建一个基于DiskLruCache的磁盘缓存。
// Public API.
@SuppressWarnings({"WeakerAccess", "unused"})
public final class InternalCacheDiskCacheFactory extends DiskLruCacheFactory {
小计
这个工厂模式的实现并不算复杂 通过接口定义磁盘缓存业务。 DiskLruCacheFactory实现算法定义 根据环境或设置选择磁盘位置Internal或External。
扩展作者是再想大家搞应用开发应该都下载过一些文件或者图片什么的,或者有些日志文件等文件存储。这部分功能模块应该具备通用性。可以借鉴这块实现自己的文件缓存管理功能模块。这样顺便练习Lru算法哦!模块写的好记得开源留言一下。和大家一起践行拿来即用主义。
面试硬着头皮刷算法,在面试的时候还真不一定被用到。但是Lru作为android开发肯定会知道的(如果不知道那你可以把薪资要求提高5k没有毛病)。这个拿出来和技术面试官嗨上十多分钟没有问题。Lru算法在Android里很有聊头的。磁盘、内存、CPU、线程等等都可以用到的。
附录1 手写LRU算法(先挖个坑) 更多单例模式 Glide设计模式之单例模式 空对象模式 Glide设计模式之空对象模式【EmptyModelLoader】【EmptyList<E> 建造者模式 Glide多种组合使用方式记录–没有全部亲测,大家可以根据实际需要选用 Glide设计模式之建造者(builder)模式1【GlideBuilder】 Glide设计模式之建造者(builder)模式2【RequestBuilder】 Glide设计模式之建造者(builder)模式3【RequestOptions】【BaseRequestOptions】 Glide设计模式之建造者(builder)模式4总结【MemorySizeCalculator】【GlideExecutor】【PreFillType】【LazyHeaders】 工厂模式 Glide设计模式之工厂模式1【ModelLoaderFactory】 Glide设计模式之工厂模式2【DiskCache.Factory】 Glide工厂模式3【TransitionFactory】【Transition】 Glide设计模式之工厂模式4总结