下面是DiskBasedCache#pruneIfNeeded()源码:
[代码]java代码:
private void pruneIfNeeded( int neededSpace) { if ((mTotalSize + neededSpace) < mMaxCacheSizeInBytes) { return ; } long before = mTotalSize; int prunedFiles = 0 ; long startTime = SystemClock.elapsedRealtime(); Iterator<map.entry<string, cacheheader= "" deep= "9" >> iterator = mEntries.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry<string, cacheheader= "" > entry = iterator.next(); CacheHeader e = entry.getValue(); boolean deleted = getFileForKey(e.key).delete(); if (deleted) { mTotalSize -= e.size; } else { //print log } iterator.remove(); prunedFiles++; if ((mTotalSize + neededSpace) < mMaxCacheSizeInBytes * HYSTERESIS_FACTOR) { break ; } } }</string,></map.entry<string,> |
在缓存内容可能超过缓存文件夹的大小时,删除的逻辑是直接遍历header删除。这个时候删除的文件有可能是我们上一次请求时刚刚保存下来的,屁股都还没坐稳呢,现在立即删掉,有点舍不得啊。
如果遍历的时候,判断一下,首先删除超过缓存有效期的(过期缓存),其次按照LRU算法,删除最久未使用的,岂不是更合适