为了账号安全,请及时绑定邮箱和手机立即绑定

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

标签:
Android

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

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消