Android WebView缓存策略详解

WebView中存在着两种缓存:网页数据缓存(存储打开过的页面及资源)、H5缓存(即appcache)。

H5 缓存

1、缓存构成
根据setAppCachePath(String appCachePath)提供的路径,在H5使用缓存过程中生成的缓存文件。

2、缓存模式
无模式选择,通过setAppCacheEnabled(boolean flag)设置是否打开。默认关闭,即,H5的缓存无法使用。

3、清除缓存
找到调用setAppCachePath(String appCachePath)设置缓存的路径,把它下面的文件全部删除就OK了。

开发过程中遇到使用特定的网址自动登录,界面本身加载成功,但是登录状态失败,通过 chrome 的 debug 调试:chrome://inspect/#devices 查看发现与普通chrome浏览器的网络请求状态基本没有明显差别,基本 JS 都加载成功,区别只是登录成功状态的信息获取根本就没有请求

一开始往二次跳转的思路上面去解决,后面发现根本就没有过二次跳转的 shouldOverrideUrlLoading 方法,那也就是说明根本不是多次跳转的问题,于是往缓存上面着手,最后经过查找 webview 默认不会开启 H5 的缓存,需要主动打开,于是尝试开启

settings.setAppCacheEnabled(true);
settings.setAllowFileAccess(true);
settings.setAppCachePath(new File(context.getFilesDir(), "XXXX").getAbsolutePath());
settings.setDatabaseEnabled(true);
settings.setDomStorageEnabled(true);

开启过后登录状态正常展示。

转载:https://blog.csdn.net/a345017062/article/details/8573689

Concurrent Processing with Pool Cache Model

  • ♻️通过MissionsDispatch分配到不同Threads,进行“自循环”并发事物处理(并发控制,可以通过Queue等机制进行协调)
  • 处理后的所有output统一存放到公共CachePool,该缓冲池存在内存里,保证速度,和跨线程存取
  • 并发的协调可以通过CachePool中各线程独自存储的flag进行判断
  • ♻️Persist存储单元通过“自循环”,定时去CachePool获取当前全部数据并存到本地,同时释放CachePool