继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

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

开满天机
关注TA
已关注
手记 94
粉丝 74
获赞 262

   下面是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

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP