Cache pkg

cache包目录

disk cache

1.DiskCache.java

该接口是本地内存操作的提取,因为涉及到缓存设计的不同算法(在iml中有具体使用)

naming

1.FileNameGenerator.java

该类是一个interface(主要是用来解耦) 本地缓存时方便给image file命名

2.HashCodeFileNameGenerator.java

实现了FileNameGenerator,通过本地缓存file name以image uri hashcode命名

3.Md5FileNameGenerator

同样实现了FileNameGenerator,通过image uri的MD5给文件命名;

1-1

这里用到了BigInteger.toString(RADIX)

这里的RADIX是36进制的,这种命名既可以保证唯一,文件名又短。

可以看出以上这三个类的设计是一个策略模式

impl

1.BaseDiskCache.java

实现了DiskCache,是一个模版类(模版方法模式);

注意:reserveCacheDir是本地缓存的一个预留目录,当cacheDir不可用时使用reserveCacheDir;

2.UnlimitedDiskCache.java

本地缓存的默认实现,就像类名说的那样,没有限制本地缓存空间大小。

3.LimitedAgeDiskCache.java

具有有效期的本地缓存;

1-2

key:loadingDates存储了文件的缓存日期。

ext

1.Util.java

垃圾抽屉工具类

2.DiskLruCache.java

封装了LRU本地缓存的核心实现。

本地文件的key,size,等信息作者是采用文件记录的方式实现的;

记录中图片文件的state-specific values

DIRTY 创建一个图片文件

CLEAN 图片文件缓存成功,带读取

READ 读取图片文件

REMOVE 删除图片文件

每次对图片文件进行操作,state改变都会做记录

3.LruDiskCache.java

LRU实现的本地缓存,实现了DiskCache;

memory cache

1.MemoryCache.java

声明内存缓存调用接口

2.BaseMemoryCache.java

是一个模版类,实现MemoryCache了接口

1-3

这里bitmap被封装在Reference(内存不足时回收),避免OOM。

3.LimitedMemoryCache.java

extends BaseMemoryCache模版类,可以制定内存缓存的大小;

1-4

每次put的时候和cacheSize(AtomicInteger类型,保证计算操作线程安全)进行比较,超出sizeLimit,从hardCache中移除;

4.FIFOLimitedMemoryCache.java

FIFO算法实现内存缓存

1-5

当put的时候超出sizeLimit,采用先进先出策略移除。

5.FuzzyKeyMemoryCache.java

implements MemoryCache,装饰模式。

该类的实现给图片缓存算法增加了一个特别的功能,当图片key在缓存中已经存在,可以替换;

1-6

6.LargestLimitedMemoryCache.java

模版方法模式,extends LimitedMemoryCache。当超出sizeLimit,移除缓存中尺寸最大的图片。

1-7

7.LimitedAgeMemoryCache.java

装饰模式;实现了特色功能,给缓存中的图片指定了有效期。当图片存在缓存中的时间大于maxAge,直接移除。

1-8

8.LRULimitedMemoryCache.java

模版模式,LRU算法实现的图片缓存。当超出maxSize,移除最长时间没有使用的图片对象。

1-9

注意:这里作者LRU使用LinkHashMap实现,accessOrder = true;

考虑到侧重点是在空间上的使用,加载因子LOAD_FACTOR = 1.1f,而不是0.75f。

2-1

9.LruMemoryCache.java

策略模式,单纯的LRU缓存,不依赖Reference。

10.UsingFreqLimitedMemoryCache.java

模版模式,简单来说LFU缓存,超出sizeLimit,移除最近使用次数最少的图片对象。

2-2

11.WeakMemoryCache.java

策略模式,extends BaseMemoryCache。

弱引用实现的图片缓存,图片对象依赖gc回收。

2-3

android uil,Android-UIL-cache相关推荐

  1. android app根目录下cache,Android 缓存目录 Context.getExternalFilesDir()和Context.getExternalCacheDir()方法...

    一.基础知识 应用程序在运行的过程中如果需要向手机上保存数据,一般是把数据保存在SDcard中的. 大部分应用是直接在SDCard的根目录下创建一个文件夹,然后把数据保存在该文件夹中. 这样当该应用被 ...

  2. AVD模拟器再次运行提示Could not open 'C:\Users\Shinelon\.android\avd\1.avd/cache.img':

    运行一个app,再次打开返回错误 -drive if=none,index=1,id=cache,file=C:\Users\LDY.android\avd\AVD_for_Nexus_7_2012_ ...

  3. 【Android】Android程序自己主动更新

    App自己主动更新的步骤可分为三步: 检查更新(假设有更新进行第2步,否则返回) 下载新版的APK安装包 安装APK 以下对这三步进行解释.当中会穿插相应代码.App自己主动更新的这三步所有被封装到了 ...

  4. Android FileUtil(android文件工具类)

    android开发和Java开发差不了多少,也会有许多相同的功能.像本文提到的文件存储,在Java项目和android项目里面用到都是相同的.只是android开发的一些路径做了相应的处理. 下面就是 ...

  5. Android技能树 — Android存储路径及IO操作小结

    前言 最近过年刚上来,打算把自己的Android知识都整理一下. Android技能书系列: Android基础知识 Android技能树 - 动画小结 Android技能树 - View小结 And ...

  6. [Android 基础] -- Android 属性系统简介

    一.简介 在 android 系统中,为同一管理系统的属性,设计了一个统一的属性系统.每个属性都有一个名字和值,他们都是字符串格式.属性被大量使用在 Android 系统中,用来记录系统设置或进程之间 ...

  7. android之android.intent.category.DEFAULT的用途和使用

    1.要弄清楚这个问题,首先需要弄明白什么是implicit(隐藏) intent什么是explicit(明确) intent. Explicit Intent明确的指定了要启动的Acitivity , ...

  8. android:layout_with=,android – 难以理解layout_alignWithParentIfMissing

    这仅适用于使用RelativeLayout时. 如果您将元素设置为一个其他元素,则表示该元素位于该元素的左侧. 但是如果这个元素会丢失,因为你删除它,例如它将与父对齐. 举个例子 android:la ...

  9. [Android Studio] Android Studio常用快捷键

    [Android Studio] Android Studio常用快捷键 (会持续更新)这边讲的常用快捷键是指做完Keymap到Eclipse后的,不是纯Android Studio的,这边主要讲下比 ...

  10. Android利用android:indeterminateDrawable来实现ProgressBar三种方式

    方式1:(效果为补间动画一样) [html] view plaincopyprint? <ProgressBar android:layout_width="wrap_content& ...

最新文章

  1. ARM Linux 3.x的设备树(Device Tree)【转】
  2. PAI和Hologres的个性化推荐最佳实践
  3. 教你快速掌握如何使用“Opatch”打补丁
  4. mysql从节点放家里_添加MySQL 5.6 从节点 Slave
  5. Android 4.4及以上系统下应用的状态栏颜色渐变效果的实现
  6. mysql 200列_认识mysql(2)
  7. 运算放大器基本公式_还在被三阶/四阶/运算放大器滤波器PLL这些概念困扰?这篇文章帮你搞懂它...
  8. e的矩阵次方_利用状态转移矩阵和VBA求游戏中各种事件达成次数的期望
  9. 【三次握手、四次挥手流程】及【长短链接区别】
  10. php7.0搭配nginx,Linux安装配置php7.0+nginx
  11. 如何用 Tensorflow 搭建神经网络-了解神经网络基本概念
  12. Java 设计模式 之 代理模式(Proxy)
  13. 淘宝秒杀服务器架构猜想
  14. 【PRD】倒推“Soul”APP产品需求文档
  15. Python:利用Entrez库筛选下载PubMed文献摘要
  16. A股各概念板块龙头股大全
  17. 读懂西瓜书 14 : 概率图模型
  18. 「Computer Vision」Note on Seamless Nudity Censorship(裸体审查)
  19. 互联网的控制权——根服务器
  20. Office系列办公软件中的一款-Microsoft Excel提供下载

热门文章

  1. IIS集群设置Server Farms 配置步骤
  2. Python标准库 内置函数exec object globals locals
  3. 如何完成个人支付接口申请?
  4. java岛屿的个数_岛屿数量
  5. Linux下最简单的动态域名用法
  6. android treble,Android Treble 简单介绍.ppt
  7. 计算机审计实习遇到问题及解决方法,浅析审计实务教学难题及解决途径
  8. 基于win32控制台应用程序的双人俄罗斯方块小游戏
  9. 在Linux系统中实现一个可加载的内核模块
  10. MFC界面控件BCGControlBar v33.3 - 编辑控件功能升级