LruCache 原理】的更多相关文章

LruCache是一个泛型类,它内部采用LinkedHashMap,并以强引用的方式存储外界的缓存对象,提供get和put方法来完成缓存的获取和添加操作.当缓存满时,LruCache会移除较早的缓存对象,然后再添加新的缓存对象.对Java中四种引用类型还不是特别清楚的读者可以自行查阅相关资料,这里不再给出介绍. 介绍源码前 先介绍LinkedHashMap一些特性      LinkedHashMap实现与HashMap的不同之处在于,后者维护着一个运行于所有条目的双重链接列表.此链接列表定义了…
一.注释 LRUCache的原理,基本都在注释里面描述清楚了. /** * 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…
一.Android中的缓存策略 一般来说,缓存策略主要包含缓存的添加.获取和删除这三类操作.如何添加和获取缓存这个比较好理解,那么为什么还要删除缓存呢?这是因为不管是内存缓存还是硬盘缓存,它们的缓存大小都是有限的.当缓存满了之后,再想其添加缓存,这个时候就需要删除一些旧的缓存并添加新的缓存. 因此LRU(Least Recently Used)缓存算法便应运而生,LRU是近期最少使用的算法,它的核心思想是当缓存满时,会优先淘汰那些近期最少使用的缓存对象.采用LRU算法的缓存有两种:LrhCach…
Android用LruCache来取代原来强引用和软引用实现内存缓存,因为据说自2.3以后Android将更频繁的调用GC,导致软引用缓存的数据极易被释放. LruCache使用一个LinkedHashMap简单的实现内存的缓存,没有软引用,都是强引用.如果添加的数据大于设置的最大值,就删除最先缓存的数据来调整内存.他的主要原理在trimToSize方法中.需要了解两个主要的变量size和maxSize maxSize是通过构造方法初始化的值,他表示这个缓存能缓存的最大值是多少. size在添加…
韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha LruCache 使用一个 链表式的哈希图LinkedHashMap 简单的实现 内存的缓存,没有软引用,都是强引用. 如果添加的数据大于设置的最大值,就删除最先的数据. maxSize是通过构造方法 定义的值. 缓存的最大值. size 在添加 和 移除 缓存 都被更新, 它通过 safeSizeOf 这个方法 更新. 这个方法默认返回1.  一般会重写这个方法.…
原文地址:https://github.com/LittleFriendsGroup/AndroidSdkSourceAnalysis/blob/master/article/LruCache%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90.md 1. 简介 LRU 是 Least Recently Used 最近最少使用算法. 曾经,在各大缓存图片的框架没流行的时候.有一种很常用的内存缓存技术:SoftReference 和 WeakReference(软引用和弱引用)…
VolleyGoogle I/O 2013推出的网络通信库,在volley推出之前我们一般会选择比较成熟的第三方网络通信库,如: android-async-http retrofit okhttp 源码:http://www.jinhusns.com/Products/Download/?type=xcj 他们各有优劣,之前个人则比较喜欢用android-async-http, 如今Google推出了官方的针对Android平台上的网络通信库,能使网络通信更快,更简单,更健壮,Volley在提…
Volley是Google I/O 2013推出的网络通信库,在volley推出之前我们一般会选择比较成熟的第三方网络通信库,如: android-async-http retrofit okhttp 他们各有优劣,之前个人则比较喜欢用android-async-http, 如今Google推出了官方的针对Android平台上的网络通信库,能使网络通信更快,更简单,更健壮,Volley在提供了高性能网络通讯功能的同时,对网络图片加载也提供了良好的支持,完全可以满足简单REST客户端的需求, 我们…
三级缓存缓存(内存)--->本地磁盘---->网络1.首先看一下图片存储到本地磁盘 public class FileUtils { String path;//文件存储的地方 public FileUtils(Context context,String dirName){//文件夹的名称 if(Environment.getExternalStorageState() == Environment.MEDIA_MOUNTED){//SD卡就绪 //文件可以放在SD卡中 path = Env…
/** * Volley 可以同时请求多个,允许高并发 * 特性: * 1.JSON.图片等的异步下载 * 2.网络请求的排序(Scheduling) * 3.网络请求的优先级处理 * 4.缓存 * 5.多级别取消请求 * 6.和Activity的生命周期的联动(Activity结束时同时取消所有网络请求) * * 步骤: * 1.拿到一个请求队列(RequestQueue只需要一个即可,不像AsyncTask每次使用都要new一个). * 这个请求队列对象,可以缓存所有的HTTP请求,然后按照…