The code below is useful if you need to cache images in Android. Weak references are used to help protect against memory leaks.
Drawable Cache Class:public class DrawableCache { public Context Context { get; set; } Dictionary<object, WeakReference<Drawable.ConstantState>> _cache = new Dictionary<object, WeakReference<Drawable.ConstantState>>(); public DrawableCache(Context context) { Context = context; } public void Put(object key, Drawable drawable) { _cache[key] = new WeakReference<Drawable.ConstantState>(drawable.GetConstantState(), false); } public Drawable Get(object key) { WeakReference<Drawable.ConstantState> value; if (_cache.TryGetValue(key, out value)) { Drawable.ConstantState target; if (value.TryGetTarget(out target)) { return target.NewDrawable(Context.Resources); } _cache.Remove(key); } return null; } }Optional Drawable Cache Key class
public class DrawableCacheKey { public int Key { get; set; } public int Flags { get; set; } public DrawableCacheKey(int key, int flags) { Key = key; Flags = flags; } public override int GetHashCode() { int hash = 17; hash = hash * 23 + Key.GetHashCode(); hash = hash * 23 + Flags.GetHashCode(); return hash; } public override bool Equals(object obj) { if (this == obj) return true; if (obj == null) return false; var cast = obj as DrawableCacheKey; return cast != null && Key == cast.Key && Flags == cast.Flags; } }
No comments:
Post a Comment