在我的應用程序中,我有包含一些縮略圖的不同列表視圖。 今天我開始重構,我想實現LRU緩存。我遵循Android指南,但是我想知道是否最好只爲整個應用初始化一個LRU緩存,或者更好地爲每個列表視圖初始化LRU緩存。 我害怕outOfMemory。 因此,我有以下問題,我不能自己回答: - 單個模式初始化一個LRU緩存是一個好主意? - 如果內存不足,是否會導致outOfMemory情況出現以下LRU Cache的初始化?LRU緩存:僅爲整個應用初始化一個緩存?
@Override
protected void onCreate(Bundle savedInstanceState) {
...
// Get max available VM memory, exceeding this amount will throw an
// OutOfMemory exception. Stored in kilobytes as LruCache takes an
// int in its constructor.
final int maxMemory = (int) (Runtime.getRuntime().maxMemory()/1024);
// Use 1/8th of the available memory for this memory cache.
final int cacheSize = maxMemory/8;
mMemoryCache = new LruCache<String, Bitmap>(cacheSize) {
@Override
protected int sizeOf(String key, Bitmap bitmap) {
// The cache size will be measured in kilobytes rather than
// number of items.
return bitmap.getByteCount()/1024;
}
};
...
}
如果內存不足時,LRU緩存自動釋放?我想知道當我使用LRU緩存(應用程序崩潰,因爲內存不足)時應用程序是否會釋放內存問題?
只有一個LRU緩存可用於整個應用程序嗎?
- 整個應用程序有多個LRU緩存,它們會成爲問題嗎?
嗨!此時我正在初始化listview構造函數中的weakHashMap,並將縮略圖放在該地圖中。我當時認爲最好使用LRU緩存,但在閱讀你的答案後,我有點害怕。 – aeroxr1
我剛纔看了一下'WeakHashMap'。我沒有意識到這是*鍵*在該類中具有弱引用,而不是值。出於這個原因,我想你可能想要像'Map>'這樣的地圖。我現在有點希望,我已經這樣做了。由於'LruCache'類與GC沒有任何隱含關係,因此幾乎沒有用處。所以你可能走在正確的軌道上。只要測試它的廢話,如果它的行爲可以接受,宣佈勝利,並稱它爲一天。 –
在弱哈希圖是弱關鍵的參考?真的嗎?我不知道這個! – aeroxr1