KeyStoreLruCachepublic class KeyStoreLruCache extends Object An LRU cache that internally support querying the keys as well as values. We use this to keep
track of the task metadata to determine when to invalidate the cache when tasks have been
updated. Generally, this cache will return the last known cache value for the requested task
key. |
Fields Summary |
---|
HashMap | mTaskKeys | android.util.LruCache | mCache |
Constructors Summary |
---|
public KeyStoreLruCache(int cacheSize)
mCache = new LruCache<Integer, V>(cacheSize) {
@Override
protected void entryRemoved(boolean evicted, Integer taskId, V oldV, V newV) {
mTaskKeys.remove(taskId);
}
};
|
Methods Summary |
---|
final void | evictAll()Removes all the entries in the cache.
mCache.evictAll();
mTaskKeys.clear();
| final V | get(Task.TaskKey key)Gets a specific entry in the cache.
return mCache.get(key.id);
| final V | getAndInvalidateIfModified(Task.TaskKey key)Returns the value only if the Task has not updated since the last time it was in the cache.
Task.TaskKey lastKey = mTaskKeys.get(key.id);
if (lastKey != null && (lastKey.lastActiveTime < key.lastActiveTime)) {
// The task has updated (been made active since the last time it was put into the
// LRU cache) so invalidate that item in the cache
remove(key);
return null;
}
// Either the task does not exist in the cache, or the last active time is the same as
// the key specified, so return what is in the cache
return mCache.get(key.id);
| final void | put(Task.TaskKey key, V value)Puts an entry in the cache for a specific key.
mCache.put(key.id, value);
mTaskKeys.put(key.id, key);
| final void | remove(Task.TaskKey key)Removes a cache entry for a specific key.
mCache.remove(key.id);
mTaskKeys.remove(key.id);
| final int | size()Returns the size of the cache.
return mCache.size();
| final void | trimToSize(int cacheSize)Trims the cache to a specific size
mCache.resize(cacheSize);
|
|