*/publicclassImageDownloader{privatestaticfinalStringTAG="TextDownload";privateLruCache<String, Bitmap> lruCache;publicImageDownloader(){longmaxMemory=Runtime.getRuntime().maxMemory();intcacheSize=(int) (maxMemory /8); lruCache =newLruCache<String, Bitmap>(cacheSize) {@OverrideprotectedintsizeOf(S...
public Bitmap getBitmapLruCache(Integer key) { return mBitmapCache.get(key); } 可以看到我们准备缓存Bitmap与String,只需要拿到信息的时候put进缓存中,需要的时候get出来,是不是非常简单,我们为我们String分配了1m为我们的Bitmap分配了2m空间,这只是我们的demo为了简单这样使用,实际上我们应该更加详细的考虑到...
① LRU 算法 :LruCache 使用 LRU ( Least Recently Used 最近最少使用 ) 算法 , 其内部维护了一个 LinkedHashMap 队列 ; ② LRU 数据淘汰原理 :最近最少使用的数据 , 将会被淘汰 ; ③ LRU 缓存数据优先级 :如果某数据最近被访问过 , 那么之后的一段时间可能被访问的几率增加 , 其优先级提高 , 如果某...
首先需要直接定义一个LruCache,注意内部实现是Map,所以要设置key和value的类型: //LRU缓存privateLruCache<String,Bitmap>mCache; 然后就是初始化LruCache,来看下面这段代码: //返回Java虚拟机将尝试使用的最大内存intmaxMemory=(int)Runtime.getRuntime().maxMemory();//指定缓存大小intcacheSize=maxMemory/4;mCach...
LruCache作为内存缓存,使用强引用方式缓存有限个数据,当缓存的某个数据被访问时,它就会被移动到队列的头部,当一个新数据要添加到LruCache而此时缓存大小要满时,队尾的数据就有可能会被垃圾回收器(GC)回收掉,LruCache使用的LRU(Least Recently Used)算法,即:把最近最少使用的数据从队列中移除,把内存分配给最新进入...
LRU是Least Recently Used的缩写,即“最近最少使用”,说明LRU缓存算法的淘汰策略是把最近最少使用的数据移除,让出内存给最新读取的数据。下面看一下Android开发中的LruCache。 Android.util.LruCache 这个LruCache在android.util包下,是API level 12引入的,对于API level 12之前的系统可以使用support library中的LruCa...
Android提供了LRUCache类,可以方便的使用它来实现LRU算法的缓存。Java提供了LinkedHashMap,可以用该类很方便的实现LRU算法,Java的LRULinkedHashMap就是直接继承了LinkedHashMap,进行了极少的改动后就可以实现LRU算法。 二、Java的LRU算法 Java的LRU算法的基础是LinkedHashMap,LinkedHashMap继承了HashMap,并且在HashMap的...
Android之本地缓存——LruCache(内存缓存)与DiskLruCache(硬盘缓存)统一框架一、前言该框架或者说库,主要是用于本地的图片缓存处理。数据的存入当你取到图片的元数据,会将数据存入硬盘缓存以及内存缓存中。数据的获取取数据的时候,先从内存缓存中取;如果没有取到,则从硬盘缓存中取(此时如果硬盘缓存有数据,硬盘缓存...
LruCache这个类在android.util包下,是API level 12引入的,对于API level 12之前的系统可以使用support library中的LruCache。这个类非常适合用来缓存图片,它的主要算法原理是把最近使用的对象用强引用存储在 LinkedHashMap中,并且把最近最少使用的对象在缓存值达到预设定值之前从内存中移除。
if (cacheParams.initDiskCacheOnCreate) { // Set up disk cache initDiskCache(); } }//初始化DiskLruCache,因为操作外部存储比较耗时,所以这部分最好放在子线程中执行 public void initDiskCache() { // Set up disk cache synchronized (mDiskCacheLock) { if (mDiskLruCache == null || mDiskLru...