手记

如果让你去设计Volley的缓存功能,你要如何增大它的命中率

   下面是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算法,删除最久未使用的,岂不是更合适

原文链接:http://www.apkbus.com/blog-880401-63091.html

0人推荐
随时随地看视频
慕课网APP