分类: 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. }

Android提供的LruCache类简介的更多相关文章

  1. (转载)实例详解Android快速开发工具类总结

    实例详解Android快速开发工具类总结 作者:LiJinlun 字体:[增加 减小] 类型:转载 时间:2016-01-24我要评论 这篇文章主要介绍了实例详解Android快速开发工具类总结的相关 ...

  2. 合理使用Android提供的Annotation来提高代码的质量

    概述 Java语言提供了Annotation的机制,让描述性的元数据能够和代码共存.通常我们可以利用Annotation,来做一些标志性的说明.然而Annotation必须和相应的解析工具一起才能工作 ...

  3. android Shader类简介_渲染图像示例

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

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

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

  5. Android 网络编程 API笔记 - java.net 包 权限 地址 套接字 相关类 简介

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

  6. Android提供了5种方式存储数据:

    --使用SharedPreferences存储数据: --文件存储数据: --SQLite数据库存储数据: --使用ContentProvider存储数据: --网络存储数据: 一:使用SharedP ...

  7. Android 编程下的 TraceView 简介及其案例实战

    TraceView 是 Android 平台配备一个很好的性能分析的工具.它可以通过图形化的方式让我们了解我们要跟踪的程序的性能,并且能具体到 method.详细内容参考:Profiling with ...

  8. 详细解读LruCache类

    LruCache是android提供的一个缓存工具类,其算法是最近最少使用算法.它把最近使用的对象用“强引用”存储在LinkedHashMap中,并且把最近最少使用的对象在缓存值达到预设定值之前就从内 ...

  9. 【转】彻底解析Android缓存机制——LruCache

    彻底解析Android缓存机制——LruCache 关于Android的三级缓存,其中主要的就是内存缓存和硬盘缓存.这两种缓存机制的实现都应用到了LruCache算法,今天我们就从使用到源码解析,来彻 ...

随机推荐

  1. MYSQL-实现ORACLE- row_number() over(partition by ) 分组排序功能

    MYSQL-实现ORACLE- row_number() over(partition by ) 分组排序功能 由于MYSQL没有提供类似ORACLE中OVER()这样丰富的分析函数. 所以在MYSQ ...

  2. mvc 分页js

    <script type="text/javascript">     var configA = {         options: {             m ...

  3. Mac和iOS开发资源汇总

    小引 本文主要汇集一些苹果开发的资源,会经常更新,建议大家把这篇文章单独收藏(在浏览器中按command+D). 今天(2013年7月19日)收录了许多中文网站和博客.大家一定要去感受一下哦. 如果大 ...

  4. Sqlitekit 封装管理

    最近需要用到Sqlite数据库来做一个游戏的数据存储.网上搜了一下,两种方法,一种是自己dll搭建环境有可能还需要编译之类的,我自己是搭建出来了,不过我没采用. 还有一种就是使用sqlitekit插件 ...

  5. Oracle session连接数和inactive的问题记录

    Oracle session连接数和inactive的问题记录 http://timnity.javaeye.com/blog/280383 从上周起,服务器Oracle数据库出现问题,用不到半天,就 ...

  6. 【redis】01Redis的介绍与安装部署

    单元目标: 1.NoSQL介绍 2.Redis的介绍 3.Redis适用场合 4.Redis的安装与部署 5.Redis的数据类型 6.Redis的常用命令 7.Redis的高级应用       通过 ...

  7. UVA 133 The Dole Queue(报数问题)

    题意:一个长度为N的循环队列,一个人从1号开始逆时针开始数数,第K个出列,一个人从第N个人开始顺时针数数,第M个出列,选到的两个人要同时出列(以不影响另一个人数数),选到同一个人就那个人出列. 思路: ...

  8. Ubuntu环境下利用ant编译nutch2.2.1 & 配置nutch2.2.1

    /×××××××××××××××××××××××××××××××××××××××××/ Author:xxx0624 HomePage:http://www.cnblogs.com/xxx0624/ ...

  9. 深入浅出Java并发包—CAS机制

    在JDK1.5之前.Java主要靠synchronized这个关键字保证同步,已解决多线程下的线程不安全问题,但是这会导致锁的发生,会引发一些个性能问题. 锁主要存在一下问题 (1)在多线程竞争下,加 ...

  10. activiti5.13 框架 数据库设计说明书

    转载自:http://www.cnblogs.com/llzgzljl/p/3356108.html activiti5.13 框架 数据库设计说明书 1.结构设计 1.1.    逻辑结构设计 Ac ...