Android 快取機制 LRUCache

2021-08-13 22:15:02 字數 1644 閱讀 7418

linkedhashmap 排序模式

/**

* initialcapacity 初始容量

* loadfactor 達到該百分比就擴容map

* 排序模式:true為訪問順序 false為插入順序

*/public

linkedhashmap(int initialcapacity,

float loadfactor,

boolean accessorder)

public

lrucache(int maxsize)

this.maxsize = maxsize;

this.map = new linkedhashmap(0, 0.75f, true);

}// 返回最舊的資料

public map.entryeldest()

public final v put(k key, v value) 

v previous;

synchronized (this)

}if (previous != null)

// lru 核心方法

trimtosize(maxsize);

return previous;

}

//移除超過maxsize資料

public

void

trimtosize(int maxsize)

// 未超過限制不處理

if (size <= maxsize)

//獲取最舊的資料

map.entrytoevict = map.eldest();

if (toevict == null)

key = toevict.getkey();

value = toevict.getvalue();

// 移除該最舊的資料

map.remove(key);

// size-- 更新size

size -= safesizeof(key, value);

evictioncount++;

}entryremoved(true, key, value, null);

}}

public

final v get(k key)

v mapvalue;

synchronized (this)

misscount++;

}// 嘗試新建乙個(不明覺厲)

v createdvalue = create(key);

if (createdvalue == null)

synchronized (this) else

}if (mapvalue != null) else

}

public

final v remove(k key)

v previous;

synchronized (this)

}if (previous != null)

return previous;

}

Android 快取機制與實現

android開發本質就是手機和網際網路中的web伺服器之間進行通訊,就必然要從服務端獲取資料,而反覆通過網路獲取資料比較耗時,特別是訪問較多的時候,會極大的影響效能,android中可通過二級快取來減少頻繁的網路操作,減少流量,提高效能。二級快取工作機制 當android端獲得資料時比如獲取網路中...

解析Android快取機制 LruCache

一般來說,快取策略主要包含快取的新增 獲取和刪除這三類操作。如何新增和獲取快取這個比較好理解,那麼為什麼還要刪除快取呢?這是因為不管是記憶體快取還是硬碟快取,它們的快取大小都是有限的。當快取滿了之後,再想其新增快取,這個時候就需要刪除一些舊的快取並新增新的快取。因此lru least recentl...

徹底解析Android快取機制 LruCache

關於android的 快取,其中主要的就是記憶體快取和硬碟快取。這兩種快取機制的實現都應用到了lrucache演算法,今天我們就從使用到原始碼解析,來徹底理解android中的快取機制。一般來說,快取策略主要包含快取的新增 獲取和刪除這三類操作。如何新增和獲取快取這個比較好理解,那麼為什麼還要刪除快...