android uil,Android-UIL-cache
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相关推荐
- android app根目录下cache,Android 缓存目录 Context.getExternalFilesDir()和Context.getExternalCacheDir()方法...
一.基础知识 应用程序在运行的过程中如果需要向手机上保存数据,一般是把数据保存在SDcard中的. 大部分应用是直接在SDCard的根目录下创建一个文件夹,然后把数据保存在该文件夹中. 这样当该应用被 ...
- 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_ ...
- 【Android】Android程序自己主动更新
App自己主动更新的步骤可分为三步: 检查更新(假设有更新进行第2步,否则返回) 下载新版的APK安装包 安装APK 以下对这三步进行解释.当中会穿插相应代码.App自己主动更新的这三步所有被封装到了 ...
- Android FileUtil(android文件工具类)
android开发和Java开发差不了多少,也会有许多相同的功能.像本文提到的文件存储,在Java项目和android项目里面用到都是相同的.只是android开发的一些路径做了相应的处理. 下面就是 ...
- Android技能树 — Android存储路径及IO操作小结
前言 最近过年刚上来,打算把自己的Android知识都整理一下. Android技能书系列: Android基础知识 Android技能树 - 动画小结 Android技能树 - View小结 And ...
- [Android 基础] -- Android 属性系统简介
一.简介 在 android 系统中,为同一管理系统的属性,设计了一个统一的属性系统.每个属性都有一个名字和值,他们都是字符串格式.属性被大量使用在 Android 系统中,用来记录系统设置或进程之间 ...
- android之android.intent.category.DEFAULT的用途和使用
1.要弄清楚这个问题,首先需要弄明白什么是implicit(隐藏) intent什么是explicit(明确) intent. Explicit Intent明确的指定了要启动的Acitivity , ...
- android:layout_with=,android – 难以理解layout_alignWithParentIfMissing
这仅适用于使用RelativeLayout时. 如果您将元素设置为一个其他元素,则表示该元素位于该元素的左侧. 但是如果这个元素会丢失,因为你删除它,例如它将与父对齐. 举个例子 android:la ...
- [Android Studio] Android Studio常用快捷键
[Android Studio] Android Studio常用快捷键 (会持续更新)这边讲的常用快捷键是指做完Keymap到Eclipse后的,不是纯Android Studio的,这边主要讲下比 ...
- Android利用android:indeterminateDrawable来实现ProgressBar三种方式
方式1:(效果为补间动画一样) [html] view plaincopyprint? <ProgressBar android:layout_width="wrap_content& ...
最新文章
- ARM Linux 3.x的设备树(Device Tree)【转】
- PAI和Hologres的个性化推荐最佳实践
- 教你快速掌握如何使用“Opatch”打补丁
- mysql从节点放家里_添加MySQL 5.6 从节点 Slave
- Android 4.4及以上系统下应用的状态栏颜色渐变效果的实现
- mysql 200列_认识mysql(2)
- 运算放大器基本公式_还在被三阶/四阶/运算放大器滤波器PLL这些概念困扰?这篇文章帮你搞懂它...
- e的矩阵次方_利用状态转移矩阵和VBA求游戏中各种事件达成次数的期望
- 【三次握手、四次挥手流程】及【长短链接区别】
- php7.0搭配nginx,Linux安装配置php7.0+nginx
- 如何用 Tensorflow 搭建神经网络-了解神经网络基本概念
- Java 设计模式 之 代理模式(Proxy)
- 淘宝秒杀服务器架构猜想
- 【PRD】倒推“Soul”APP产品需求文档
- Python:利用Entrez库筛选下载PubMed文献摘要
- A股各概念板块龙头股大全
- 读懂西瓜书 14 : 概率图模型
- 「Computer Vision」Note on Seamless Nudity Censorship(裸体审查)
- 互联网的控制权——根服务器
- Office系列办公软件中的一款-Microsoft Excel提供下载
热门文章
- IIS集群设置Server Farms 配置步骤
- Python标准库 内置函数exec object globals locals
- 如何完成个人支付接口申请?
- java岛屿的个数_岛屿数量
- Linux下最简单的动态域名用法
- android treble,Android Treble 简单介绍.ppt
- 计算机审计实习遇到问题及解决方法,浅析审计实务教学难题及解决途径
- 基于win32控制台应用程序的双人俄罗斯方块小游戏
- 在Linux系统中实现一个可加载的内核模块
- MFC界面控件BCGControlBar v33.3 - 编辑控件功能升级