Android提供的LruCache类简介
- package android.util;
- import import /**
- * A cache that holds strong references to a limited number of values. Each time
- * a value is accessed, it is moved to the head of a queue. When a value is
- * added to a full cache, the value at the end of that queue is evicted and may
- * become eligible for garbage collection.
- * Cache保存一个强引用来限制内容数量,每当Item被访问的时候,此Item就会移动到队列的头部。
- * <p>If your cached values hold resources that need to be explicitly released,
- * override {@link #entryRemoved}.
- * 如果你cache的某个值需要明确释放,重写entryRemoved()
- * <p>If a cache miss should be computed on demand for the corresponding keys,
- * override {@link #create}. This simplifies the calling code, allowing it to
- * assume a value will always be returned, even when there's a cache miss.
- * 如果key相对应的item丢掉啦,重写create().这简化了调用代码,即使丢失了也总会返回。
- * <p>By default, the cache size is measured in the number of entries. Override
- * {@link #sizeOf} to size the cache in different units. For example, this cache
- * is limited to 4MiB of bitmaps: 默认cache大小是测量的item的数量,重写sizeof计算不同item的
- * <pre> {@code
- * int cacheSize = 4 * 1024 * 1024; // 4MiB
- * LruCache<String, Bitmap> bitmapCache = new LruCache<String, Bitmap>(cacheSize) {
- * protected int sizeOf(String key, Bitmap value) {
- * return value.getByteCount();
- * }
- * }}</pre>
- *
- * <p>This class is thread-safe. Perform multiple cache operations atomically by
- * synchronizing on the cache: <pre> {@code
- * synchronized (cache) {
- * if (cache.get(key) == null) {
- * cache.put(key, value);
- * }
- * }}</pre>
- *
- * <p>This class does not allow null to be used as a key or value. A return
- * value of null from {@link #get}, {@link #put} or {@link #remove} is
- * unambiguous: the key was not in the cache.
- */ publicclass privatefinal
- privateint size; //已经存储的大小
- privateint maxSize; //规定的最大存储空间
- privateint putCount; //put的次数
- privateint createCount; //create的次数
- privateint evictionCount; //回收的次数
- privateint hitCount; //命中的次数
- privateint missCount; //丢失的次数
- * @param maxSize for caches that do not override {@link #sizeOf}, this is
- * the maximum number of entries in the cache. For all other caches,
- * this is the maximum sum of the sizes of the entries in this cache.
- */ publicint if) {
- thrownew this thisnew, .75f, true * Returns the value for {@code key} if it exists in the cache or can be
- * created by {@code #create}. If a value was returned, it is moved to the
- * head of the queue. This returns null if a value is not cached and cannot
- * be created. 通过key返回相应的item,或者创建返回相应的item。相应的item会移动到队列的头部,
- */ publicfinal ifnull thrownew synchronizedthis ifnull return * Attempt to create a value. This may take a long time, and the map
- * may be different when create() returns. If a conflicting value was
- * added to the map while create() was working, we leave that value in
- * the map and release the created value.
- * 如果丢失了就试图创建一个item
- */ ifnull returnnull synchronizedthis ifnull
- //如果前面存在oldValue,那么撤销put()
- else ifnull false return else return * Caches {@code value} for {@code key}. The value is moved to the head of
- * the queue.
- *
- * @return the previous value mapped by {@code key}.
- */ publicfinal ifnullnull thrownew synchronizedthis ifnull) { //返回的先前的value值
- ifnull false return * @param maxSize the maximum size of the cache before returning. May be -1
- * to evict even 0-sized elements.
- */ privatevoidint whiletrue synchronizedthis if || (map.isEmpty() && size != )) {
- thrownew if break ifnull break truenull * Removes the entry for {@code key} if it exists.
- * 删除key相应的cache项,返回相应的value
- * @return the previous value mapped by {@code key}.
- */ publicfinal ifnull thrownew synchronizedthis ifnull ifnull falsenull return * Called for entries that have been evicted or removed. This method is
- * invoked when a value is evicted to make space, removed by a call to
- * {@link #remove}, or replaced by a call to {@link #put}. The default
- * implementation does nothing.
- * 当item被回收或者删掉时调用。改方法当value被回收释放存储空间时被remove调用,
- * <p>The method is called without synchronization: other threads may
- * access the cache while this method is executing.
- *
- * @param evicted true if the entry is being removed to make space, false
- * if the removal was caused by a {@link #put} or {@link #remove}.
- * @param newValue the new value for {@code key}, if it exists. If non-null,
- * this removal was caused by a {@link #put}. Otherwise it was caused by
- * an eviction or a {@link #remove}.
- */ protectedvoidboolean * Called after a cache miss to compute a value for the corresponding key.
- * Returns the computed value or null if no value can be computed. The
- * default implementation returns null.
- * 当某Item丢失时会调用到,返回计算的相应的value或者null
- * <p>The method is called without synchronization: other threads may
- * access the cache while this method is executing.
- *
- * <p>If a value for {@code key} exists in the cache when this method
- * returns, the created value will be released with {@link #entryRemoved}
- * and discarded. This can occur when multiple threads request the same key
- * at the same time (causing multiple values to be created), or when one
- * thread calls {@link #put} while another is creating a value for the same
- * key.
- */ protected returnnull privateint int if) {
- thrownew + value);
- return * Returns the size of the entry for {@code key} and {@code value} in
- * user-defined units. The default implementation returns 1 so that size
- * is the number of entries and max size is the maximum number of entries.
- * 返回用户定义的item的大小,默认返回1代表item的数量,最大size就是最大item值
- * <p>An entry's size must not change while it is in the cache.
- */ protectedint return;
- * Clear the cache, calling {@link #entryRemoved} on each removed entry.
- */ publicfinalvoid );
- * For caches that do not override {@link #sizeOf}, this returns the number
- * of entries in the cache. For all other caches, this returns the sum of
- * the sizes of the entries in this cache.
- */ publicsynchronizedfinalint return * For caches that do not override {@link #sizeOf}, this returns the maximum
- * number of entries in the cache. For all other caches, this returns the
- * maximum sum of the sizes of the entries in this cache.
- */ publicsynchronizedfinalint return * Returns the number of times {@link #get} returned a value that was
- * already present in the cache.
- */ publicsynchronizedfinalint return * Returns the number of times {@link #get} returned null or required a new
- * value to be created.
- */ publicsynchronizedfinalint return * Returns the number of times {@link #create(Object)} returned a value.
- */ publicsynchronizedfinalint return * Returns the number of times {@link #put} was called.
- */ publicsynchronizedfinalint return * Returns the number of values that have been evicted.
- */ publicsynchronizedfinalint return * Returns a copy of the current contents of the cache, ordered from least
- * recently accessed to most recently accessed. 返回当前cache的副本,从最近最少访问到最多访问
- */ publicsynchronizedfinal returnnew publicsynchronizedfinal int int ? ( * hitCount / accesses) : ;
- return,
- }
转载于:https://www.cnblogs.com/xgjblog/p/4064806.html
Android提供的LruCache类简介相关推荐
- android 快速开发常用工具类,实例详解Android快速开发工具类总结
一.日志工具类 Log.java public class L { private L() { /* 不可被实例化 */ throw new UnsupportedOperationException ...
- 【Android 应用开发】Android 网络编程 API笔记 - java.net 包 权限 地址 套接字 相关类 简介
Android 网络编程相关的包 : 9 包, 20 接口, 103 类, 6 枚举, 14异常; -- Java包 : java.net 包 (6接口, 34类, 2枚举, 12异常); -- An ...
- Android Shader类简介之渲染图像示例
Android中提供了Shader类专门用来渲染图像以及一些几何图形,Shader下面包括几个直接子类,分别是BitmapShader. ComposeShader.LinearGradient.Ra ...
- <Android开发> Android vold - 第三篇 vold 的NetLinkManager类简介
本系列主要介绍 Android vold,分为以下篇章 <Android开发> Android vold - 第一篇 vold前言简介 <Android开发> Android ...
- <Android开发> Android vold - 第四篇 vold 的NetlinkHandler类简介
本系列主要介绍 Android vold,分为以下篇章 <Android开发> Android vold - 第一篇 vold前言简介 <Android开发> Android ...
- 【Android 事件分发】ItemTouchHelper 简介 ( 拖动/滑动事件 | ItemTouchHelper.Callback 回调 )
Android 事件分发 系列文章目录 [Android 事件分发]事件分发源码分析 ( 驱动层通过中断传递事件 | WindowManagerService 向 View 层传递事件 ) [Andr ...
- Application 类 简介
2019独角兽企业重金招聘Python工程师标准>>> Application 类 简介 每次程序运行时,程序的Application 类都是保持实例化.与Activity不同:配置 ...
- 第一章 android以及智能手机行业相关简介
第一章 android以及智能手机行业相关简介读后感受&知识累计 最近深刻了解到自己基础知识的不足,变不断的开始阅读很多android相关的知识,希望这些对本人未来的职业发展有很大的帮助.下面 ...
- Android辅助功能(Accessibility)简介
Android辅助功能(Accessibility)简介 Accessibility 由于部分安卓用户在身体的问题致使他们不能看完整的屏幕或者使用触屏,google提供了Accessibility功能 ...
最新文章
- 深度学习中用于张量重塑的 MLP 和 Transformer 之间的差异图解
- JS组件系列——Bootstrap Table 冻结列功能IE浏览器兼容性问题解决方案
- apt-get常用命令
- ssh-keygen -t rsa执行后提示没有权限
- 声速的测量的实验原理和应用_创想智控:光学三角测量系统的测量原理与应用...
- NI myRIO-1900(ARM9)嵌入式小车2015.8-9
- (转)认识原型对象和原型链
- 关于开通全国计算机技术与软件专业技术资格(水平)考试继续教育远程培训平台的通知...
- RDD partitioner入门详解
- Linux上像windows的FinalData的修復工具
- js下载视频(mp4格式)
- Comsol多孔介质内的粒子流动案例,可以追踪粒子运动轨迹
- 已知二叉树的前序序列跟中序序列求后序序列(C语言)
- 服务器数据库维护需要做哪些,数据库运维究竟需要做什么?
- vue alert内含有html,vue一步步实现alert功能
- var foo =function (){}与function foo()的区别
- SplashScreen踩到的坑
- 一、C语言的具体结构
- 压力传感器变送器的作用
- 如何查询Office版本号
热门文章
- mysql 替换重复数据库,mysql关联修改,批量修改,数据同步
- java集群_JAVA架构师学习:实践ZooKeeper 应用场景与集群管理,辛勤总结
- 局域网ip地址不够用怎么解决?
- 系统管理员不可错过的6款服务器监控工具
- oracle管理员是sys吗,Oracle管理员sys,system登录无权限的坑
- 疲劳容器的定义_疲劳分析基础
- 阿里巴巴云原生的 2020,注定不凡的一年
- 迅为linux下串口,迅为iMX6UL开发板多路串口开发板接口详解
- 和平精英微信和qq不是一个服务器,和平精英微信和QQ玩家能不能一起玩?微信和QQ怎么开黑建房[图]...
- oracle z中rowid,如何将索引块里面的rowid和表里面的rowid对应起来?