Android7.0 Messaging源码分析(3) - 缓存管理篇

来源:互联网 发布:尚观java培训学费 编辑:程序博客网 时间:2024/05/22 13:47

  在《Android7.0 Messaging源码分析(2) - Application 创建篇》中介绍了在 application 创建过程中会创建缓存管理类,这篇文章来做简要分析。
  创建代码在FactoryImpl.java,

77    public static Factory register(final Context applicationContext,78            final BugleApplication application) {            ......91        factory.mMemoryCacheManager = new MemoryCacheManager();92        factory.mMediaCacheManager = new BugleMediaCacheManager();93        factory.mMediaResourceManager = new MediaResourceManager();        }

  其中包含缓存管理(MemoryCacheManager)和媒体资源管理(MediaResourceManager)两部分。
  缓存管理使用的是android.util.LRUCache,是最近最少使用(Latest recently used)缓存算法的实现,底层数据结构使用的是LinkedHashMap(当年面试的时候聊到图片缓存框架时还拿出来装b,结果没讲清楚,Faint)。有兴趣的可以深入研究一下。
  媒体资源包括VCard,Image,Avatar(头像)等。

  缓存管理类图如下:
缓存管理类图
  媒体资源管理类图如下:
媒体资源管理类图

  在创建 MediaCacheManager 时会调用 MemoryCacheManager.get().registerMemoryCache(this); 将自己注册到MemoryCacheManager。
  MediaRequest 通过 getMediaCache 接口与 MediaCache 联系起来。

47    /**48     * Returns the media cache where this MediaRequest wants to store the loaded49     * media resource.50     */51    MediaCache<T> getMediaCache();

  至于每种 Request 的实现就不做分析了。

  总结

  • 缓存管理使用了LRU缓存算法;
  • 通过 MediaRequest 来获取VCard,Image,Avatar等媒体资源,并使用缓存管理器管理它们;
0 0