1 package com.bumptech.glide.load.engine.cache; 2 3 import com.bumptech.glide.load.Key; 4 import com.bumptech.glide.load.engine.Resource; 5 import com.bumptech.glide.util.LruCache; 6 7 import static android.content.ComponentCallbacks2.TRIM_MEMORY_BACKGROUND; 8 import static android.content.ComponentCallbacks2.TRIM_MEMORY_MODERATE; 9 10 public class LruResourceCache extends LruCache<Key, Resource> implements MemoryCache { 11 private ResourceRemovedListener listener; 12 LruResourceCache(int size)13 public LruResourceCache(int size) { 14 super(size); 15 } 16 17 @Override setResourceRemovedListener(ResourceRemovedListener listener)18 public void setResourceRemovedListener(ResourceRemovedListener listener) { 19 this.listener = listener; 20 } 21 22 @Override onItemRemoved(Key key, Resource item)23 protected void onItemRemoved(Key key, Resource item) { 24 if (listener != null) { 25 listener.onResourceRemoved(item); 26 } 27 } 28 29 @Override getSize(Resource item)30 protected int getSize(Resource item) { 31 return item.getSize(); 32 } 33 trimMemory(int level)34 public void trimMemory(int level) { 35 if (level >= TRIM_MEMORY_MODERATE) { 36 // Nearing middle of list of cached background apps 37 // Evict our entire bitmap cache 38 clearMemory(); 39 } else if (level >= TRIM_MEMORY_BACKGROUND) { 40 // Entering list of cached background apps 41 // Evict oldest half of our bitmap cache 42 trimToSize(getCurrentSize() / 2); 43 } 44 45 } 46 } 47