分类: Android开发 2013-02-06 15:26 26733人阅读 评论(10) 收藏 举报
  1. package android.util;
  2. import import /**
  3. * A cache that holds strong references to a limited number of values. Each time
  4. * a value is accessed, it is moved to the head of a queue. When a value is
  5. * added to a full cache, the value at the end of that queue is evicted and may
  6. * become eligible for garbage collection.
  7. * Cache保存一个强引用来限制内容数量,每当Item被访问的时候,此Item就会移动到队列的头部。
  8. * <p>If your cached values hold resources that need to be explicitly released,
  9. * override {@link #entryRemoved}.
  10. * 如果你cache的某个值需要明确释放,重写entryRemoved()
  11. * <p>If a cache miss should be computed on demand for the corresponding keys,
  12. * override {@link #create}. This simplifies the calling code, allowing it to
  13. * assume a value will always be returned, even when there's a cache miss.
  14. * 如果key相对应的item丢掉啦,重写create().这简化了调用代码,即使丢失了也总会返回。
  15. * <p>By default, the cache size is measured in the number of entries. Override
  16. * {@link #sizeOf} to size the cache in different units. For example, this cache
  17. * is limited to 4MiB of bitmaps: 默认cache大小是测量的item的数量,重写sizeof计算不同item的
  18. * <pre>   {@code
  19. *   int cacheSize = 4 * 1024 * 1024; // 4MiB
  20. *   LruCache<String, Bitmap> bitmapCache = new LruCache<String, Bitmap>(cacheSize) {
  21. *       protected int sizeOf(String key, Bitmap value) {
  22. *           return value.getByteCount();
  23. *       }
  24. *   }}</pre>
  25. *
  26. * <p>This class is thread-safe. Perform multiple cache operations atomically by
  27. * synchronizing on the cache: <pre>   {@code
  28. *   synchronized (cache) {
  29. *     if (cache.get(key) == null) {
  30. *         cache.put(key, value);
  31. *     }
  32. *   }}</pre>
  33. *
  34. * <p>This class does not allow null to be used as a key or value. A return
  35. * value of null from {@link #get}, {@link #put} or {@link #remove} is
  36. * unambiguous: the key was not in the cache.
  37. */ publicclass privatefinal
  38. privateint size; //已经存储的大小
  39. privateint maxSize; //规定的最大存储空间
  40. privateint putCount;  //put的次数
  41. privateint createCount;  //create的次数
  42. privateint evictionCount;  //回收的次数
  43. privateint hitCount;  //命中的次数
  44. privateint missCount;  //丢失的次数
  45. * @param maxSize for caches that do not override {@link #sizeOf}, this is
  46. *     the maximum number of entries in the cache. For all other caches,
  47. *     this is the maximum sum of the sizes of the entries in this cache.
  48. */ publicint if) {
  49. thrownew this thisnew, .75f, true      * Returns the value for {@code key} if it exists in the cache or can be
  50. * created by {@code #create}. If a value was returned, it is moved to the
  51. * head of the queue. This returns null if a value is not cached and cannot
  52. * be created. 通过key返回相应的item,或者创建返回相应的item。相应的item会移动到队列的头部,
  53. */ publicfinal ifnull thrownew synchronizedthis ifnull return          * Attempt to create a value. This may take a long time, and the map
  54. * may be different when create() returns. If a conflicting value was
  55. * added to the map while create() was working, we leave that value in
  56. * the map and release the created value.
  57. * 如果丢失了就试图创建一个item
  58. */ ifnull returnnull synchronizedthis ifnull
  59. //如果前面存在oldValue,那么撤销put()
  60. else ifnull false return else return      * Caches {@code value} for {@code key}. The value is moved to the head of
  61. * the queue.
  62. *
  63. * @return the previous value mapped by {@code key}.
  64. */ publicfinal ifnullnull thrownew synchronizedthis ifnull) {  //返回的先前的value值
  65. ifnull false return      * @param maxSize the maximum size of the cache before returning. May be -1
  66. *     to evict even 0-sized elements.
  67. */ privatevoidint whiletrue synchronizedthis if || (map.isEmpty() && size != )) {
  68. thrownew if break ifnull break truenull      * Removes the entry for {@code key} if it exists.
  69. * 删除key相应的cache项,返回相应的value
  70. * @return the previous value mapped by {@code key}.
  71. */ publicfinal ifnull thrownew synchronizedthis ifnull ifnull falsenull return      * Called for entries that have been evicted or removed. This method is
  72. * invoked when a value is evicted to make space, removed by a call to
  73. * {@link #remove}, or replaced by a call to {@link #put}. The default
  74. * implementation does nothing.
  75. * 当item被回收或者删掉时调用。改方法当value被回收释放存储空间时被remove调用,
  76. * <p>The method is called without synchronization: other threads may
  77. * access the cache while this method is executing.
  78. *
  79. * @param evicted true if the entry is being removed to make space, false
  80. *     if the removal was caused by a {@link #put} or {@link #remove}.
  81. * @param newValue the new value for {@code key}, if it exists. If non-null,
  82. *     this removal was caused by a {@link #put}. Otherwise it was caused by
  83. *     an eviction or a {@link #remove}.
  84. */ protectedvoidboolean      * Called after a cache miss to compute a value for the corresponding key.
  85. * Returns the computed value or null if no value can be computed. The
  86. * default implementation returns null.
  87. * 当某Item丢失时会调用到,返回计算的相应的value或者null
  88. * <p>The method is called without synchronization: other threads may
  89. * access the cache while this method is executing.
  90. *
  91. * <p>If a value for {@code key} exists in the cache when this method
  92. * returns, the created value will be released with {@link #entryRemoved}
  93. * and discarded. This can occur when multiple threads request the same key
  94. * at the same time (causing multiple values to be created), or when one
  95. * thread calls {@link #put} while another is creating a value for the same
  96. * key.
  97. */ protected returnnull privateint int if) {
  98. thrownew + value);
  99. return      * Returns the size of the entry for {@code key} and {@code value} in
  100. * user-defined units.  The default implementation returns 1 so that size
  101. * is the number of entries and max size is the maximum number of entries.
  102. * 返回用户定义的item的大小,默认返回1代表item的数量,最大size就是最大item值
  103. * <p>An entry's size must not change while it is in the cache.
  104. */ protectedint return;
  105. * Clear the cache, calling {@link #entryRemoved} on each removed entry.
  106. */ publicfinalvoid );
  107. * For caches that do not override {@link #sizeOf}, this returns the number
  108. * of entries in the cache. For all other caches, this returns the sum of
  109. * the sizes of the entries in this cache.
  110. */ publicsynchronizedfinalint return      * For caches that do not override {@link #sizeOf}, this returns the maximum
  111. * number of entries in the cache. For all other caches, this returns the
  112. * maximum sum of the sizes of the entries in this cache.
  113. */ publicsynchronizedfinalint return      * Returns the number of times {@link #get} returned a value that was
  114. * already present in the cache.
  115. */ publicsynchronizedfinalint return      * Returns the number of times {@link #get} returned null or required a new
  116. * value to be created.
  117. */ publicsynchronizedfinalint return      * Returns the number of times {@link #create(Object)} returned a value.
  118. */ publicsynchronizedfinalint return      * Returns the number of times {@link #put} was called.
  119. */ publicsynchronizedfinalint return      * Returns the number of values that have been evicted.
  120. */ publicsynchronizedfinalint return      * Returns a copy of the current contents of the cache, ordered from least
  121. * recently accessed to most recently accessed. 返回当前cache的副本,从最近最少访问到最多访问
  122. */ publicsynchronizedfinal returnnew  publicsynchronizedfinal int int ? ( * hitCount / accesses) : ;
  123. return,
  124. }

转载于:https://www.cnblogs.com/xgjblog/p/4064806.html

Android提供的LruCache类简介相关推荐

  1. android 快速开发常用工具类,实例详解Android快速开发工具类总结

    一.日志工具类 Log.java public class L { private L() { /* 不可被实例化 */ throw new UnsupportedOperationException ...

  2. 【Android 应用开发】Android 网络编程 API笔记 - java.net 包 权限 地址 套接字 相关类 简介

    Android 网络编程相关的包 : 9 包, 20 接口, 103 类, 6 枚举, 14异常; -- Java包 : java.net 包 (6接口, 34类, 2枚举, 12异常); -- An ...

  3. Android Shader类简介之渲染图像示例

    Android中提供了Shader类专门用来渲染图像以及一些几何图形,Shader下面包括几个直接子类,分别是BitmapShader. ComposeShader.LinearGradient.Ra ...

  4. <Android开发> Android vold - 第三篇 vold 的NetLinkManager类简介

    本系列主要介绍 Android vold,分为以下篇章 <Android开发> Android vold - 第一篇 vold前言简介 <Android开发> Android ...

  5. <Android开发> Android vold - 第四篇 vold 的NetlinkHandler类简介

    本系列主要介绍 Android vold,分为以下篇章 <Android开发> Android vold - 第一篇 vold前言简介 <Android开发> Android ...

  6. 【Android 事件分发】ItemTouchHelper 简介 ( 拖动/滑动事件 | ItemTouchHelper.Callback 回调 )

    Android 事件分发 系列文章目录 [Android 事件分发]事件分发源码分析 ( 驱动层通过中断传递事件 | WindowManagerService 向 View 层传递事件 ) [Andr ...

  7. Application 类 简介

    2019独角兽企业重金招聘Python工程师标准>>> Application 类 简介 每次程序运行时,程序的Application 类都是保持实例化.与Activity不同:配置 ...

  8. 第一章 android以及智能手机行业相关简介

    第一章 android以及智能手机行业相关简介读后感受&知识累计 最近深刻了解到自己基础知识的不足,变不断的开始阅读很多android相关的知识,希望这些对本人未来的职业发展有很大的帮助.下面 ...

  9. Android辅助功能(Accessibility)简介

    Android辅助功能(Accessibility)简介 Accessibility 由于部分安卓用户在身体的问题致使他们不能看完整的屏幕或者使用触屏,google提供了Accessibility功能 ...

最新文章

  1. 深度学习中用于张量重塑的 MLP 和 Transformer 之间的差异图解
  2. JS组件系列——Bootstrap Table 冻结列功能IE浏览器兼容性问题解决方案
  3. apt-get常用命令
  4. ssh-keygen -t rsa执行后提示没有权限
  5. 声速的测量的实验原理和应用_创想智控:光学三角测量系统的测量原理与应用...
  6. NI myRIO-1900(ARM9)嵌入式小车2015.8-9
  7. (转)认识原型对象和原型链
  8. 关于开通全国计算机技术与软件专业技术资格(水平)考试继续教育远程培训平台的通知...
  9. RDD partitioner入门详解
  10. Linux上像windows的FinalData的修復工具
  11. js下载视频(mp4格式)
  12. Comsol多孔介质内的粒子流动案例,可以追踪粒子运动轨迹
  13. 已知二叉树的前序序列跟中序序列求后序序列(C语言)
  14. 服务器数据库维护需要做哪些,数据库运维究竟需要做什么?
  15. vue alert内含有html,vue一步步实现alert功能
  16. var foo =function (){}与function foo()的区别
  17. SplashScreen踩到的坑
  18. 一、C语言的具体结构
  19. 压力传感器变送器的作用
  20. 如何查询Office版本号

热门文章

  1. mysql 替换重复数据库,mysql关联修改,批量修改,数据同步
  2. java集群_JAVA架构师学习:实践ZooKeeper 应用场景与集群管理,辛勤总结
  3. 局域网ip地址不够用怎么解决?
  4. 系统管理员不可错过的6款服务器监控工具
  5. oracle管理员是sys吗,Oracle管理员sys,system登录无权限的坑
  6. 疲劳容器的定义_疲劳分析基础
  7. 阿里巴巴云原生的 2020,注定不凡的一年
  8. 迅为linux下串口,迅为iMX6UL开发板多路串口开发板接口详解
  9. 和平精英微信和qq不是一个服务器,和平精英微信和QQ玩家能不能一起玩?微信和QQ怎么开黑建房[图]...
  10. oracle z中rowid,如何将索引块里面的rowid和表里面的rowid对应起来?