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

2017-07-19  本文已影响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) 缓存机制

上一篇下一篇

猜你喜欢

热点阅读