美文网首页
Rexxar Android 系列学习(6) 缓存机制

Rexxar Android 系列学习(6) 缓存机制

作者: 無名小子的杂货铺 | 来源:发表于2017-07-19 17:16 被阅读114次

    Rexxar 缓存部分功能也是非常重要,作为数据读取的基础。首先这里也使用了开源库 ByteArrayOutputStream 相关。比较完备的提供关了一些读取扩展,能够有效的增加正确率。这部分有兴趣的可以单独看,就是输入输出流操作。

    Cache

    Cache 分为两部分:本地预装、本地 file 缓存。

    看结构就很清楚:

    ICache :提供了一个统一的缓存接口,主要根据 url 查找和删除缓存;
    CacheEntry:缓存本地 model;
    CacheHelper:缓存统一管理;
    AssetCache:本地预装 assets 文件缓存;
    HtmlFileCache:Html 缓存本地 file;
    InternalCache:默认缓存池,js,css,png等资源会用默认缓存池来存储,是有大小限制的;

    AssetCache 会在程序初始化的时候被加载。

    几个操作

    1、提供缓存开关
    2、url 转成唯一对应的 key 值

    public static String hash(String source) {
        try {
            MessageDigest messageDigest = MessageDigest.getInstance("MD5");
            byte[] md5Bytes = messageDigest.digest(source.getBytes("UTF-8"));
            return ByteString.of(md5Bytes).hex();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return source;
    }
    

    3、支持其他类型缓存的扩展,实现 ICache 即可。

    Html 缓存

    这里简单介绍下 html 缓存查找相关,使用循环遍历查找 assets、本地 file,最终都会返回 CacheEntry。

    /**
     * 查找html缓存
     *
     * @param url
     * @return
     */
    public CacheEntry findHtmlCache(String url) {
        Log.i(TAG,"findHtmlCache url1:" + url);
        if (TextUtils.isEmpty(url)) {
            return null;
        }
        url = Uri.parse(url).buildUpon().clearQuery().build().toString();
        if (!checkUrl(url)) {
            return null;
        }
        CacheEntry result;
        // 遍历外部缓存
        for (ICache cache : mCaches) {
            result = cache.findCache(url);
            if (null != result && result.isValid()) {
                Log.i(TAG,"findHtmlCache result1:" + result);
                return result;
            }
        }
        // 遍历内部缓存
        result = mInternalHtmlCache.findCache(url);
        if (null != result) {
            Log.i(TAG,"findHtmlCache result2:" + result);
            return result;
        }
        Log.i(TAG,"findHtmlCache result3:" + result);
        return result;
    }
    

    Rexxar Android 系列学习其他文章

    Rexxar Android 系列学习(1) 项目结构
    Rexxar Android 系列学习(2) 路由协议
    Rexxar Android 系列学习(3) Native 和 web 交互
    Rexxar Android 系列学习(4) 错误处理
    Rexxar Android 系列学习(5) 过滤拦截
    Rexxar Android 系列学习(6) 缓存机制

    相关文章

      网友评论

          本文标题:Rexxar Android 系列学习(6) 缓存机制

          本文链接:https://www.haomeiwen.com/subject/zuchkxtx.html