LRUCache için resmi Android belgelerini kontrol ettim diyor: Bir değer her erişildiğinde, bir sıranın başına kaydırılır. Tam önbelleğe bir değer eklendiğinde, bu sıranın sonundaki değer boşalır ve çöp toplama için uygun hale gelebilir. Sanırım bu, önbellek tarafından kullanılan linkedhashmap tarafından korunan iki bağlı liste. Bu davranışı kontrol etmek için LruCache kaynak kodunu kontrol ettim ve get (K tuşu) yöntemini kontrol ettim. Ayrıca, alttaki hashmap'dan değeri alan ve recordAccess yöntemini çağıran harita alma yöntemini de çağırır. sıraylaLRUCache giriş rewdering kullanırken kullanırken
public V get(Object key) {
LinkedHashMapEntry<K,V> e = (LinkedHashMapEntry<K,V>)getEntry(key);
if (e == null)
return null;
e.recordAccess(this);
return e.value;
}
recordAccess yöntemi accessOrder true olarak ayarlanır durumunda listenin sonuna erişilen girişi taşır başka hiçbir şey yapmaz, (benim sorun için en öyle varsayalım).
/**
* This method is invoked by the superclass whenever the value
* of a pre-existing entry is read by Map.get or modified by Map.set.
* If the enclosing Map is access-ordered, it moves the entry
* to the end of the list; otherwise, it does nothing.
*/
void recordAccess(HashMap<K,V> m) {
LinkedHashMap<K,V> lm = (LinkedHashMap<K,V>)m;
if (lm.accessOrder) {
lm.modCount++;
remove();
addBefore(lm.header);
}
}
eleman sıranın başına taşınır söylenir yukarıdaki açıklamaya çelişkili geliyor. Bunun yerine, listenin son elemanına taşındı (head.before kullanarak). Tabii ki, burada bir şey eksik, herhangi bir yardım? LinkedHashMap
ait javadoc itibaren
Hangi kaynakları kontrol ettiğiniz hakkında hiçbir fikrim yok, sadece bunu görebilirim (https://android.googlesource.com/platform/frameworks/support.git/+/795b97d901e1793dac5c3e67d43c96a758fec388/v4/java/android/support /v4/util/LruCache.java#63) – pskink
Aynı kaynakları kontrol ediyorum ve gerçek yeniden sıralama, LinkedHashMap sınıfında gerçekleşiyor (çünkü burası nerede tutuluyor), böylece map.get'e girmeniz gerekiyor () yöntem. –
tamam, bu yüzden "LinkedHashMap" uygulamasının ayrıntılarına değil, bazı sanal "" kuyruğa "işaret ederler (haritalama tersine çevrilir) – pskink