听课小知识:第三方库不要直接使用,封装后再用
前言:此篇我主要是想了解Glide缓存的封装机制,顺路看了看数据的取出过程,至于数据的存储,涉及网络层面暂时不分析了。磨刀不误砍柴工,感觉先把前三点理解透了,就很好看glide的源码了
1.内存缓存LruCache的使用
2.硬盘缓存DisLruCache的使用
Android DiskLruCache完全解析,硬盘缓存的最佳方案
3.软弱引用的使用
Android 弱引用和软引用
4.Glide缓存策略
Glide缓存机制大致分为三层:内存缓存、弱引用缓存、磁盘缓存。
存的顺序是:弱引用、内存、磁盘
取的顺序是:内存、弱引用、磁盘
以下展示的是取的过程
//从内存中取数据 EngineResourcecached = loadFromCache(key, isMemoryCacheable); if (cached != null) { cb.onResourceReady(cached); if (Log.isLoggable(TAG, Log.VERBOSE)) { logWithTimeAndKey("Loaded resource from cache", startTime, key); } return null; } //从弱引用中取数据 EngineResourceactive = loadFromActiveResources(key, isMemoryCacheable); if (active != null) { cb.onResourceReady(active); if (Log.isLoggable(TAG, Log.VERBOSE)) { logWithTimeAndKey("Loaded resource from active resources", startTime, key); } return null; } //从磁盘中取 EngineJob engineJob = engineJobFactory.build(key, isMemoryCacheable); DecodeJobdecodeJob = new DecodeJob(key, width, height, fetcher, loadProvider, transformation, transcoder, diskCacheProvider, diskCacheStrategy, priority); EngineRunnable runnable = new EngineRunnable(engineJob, decodeJob, priority); jobs.put(key, engineJob); engineJob.addCallback(cb); engineJob.start(runnable);
看loadFromCache方法中显示,当cached有值的时候,将数据存进了