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

How to import Swift code into Objective-C Module or Framework?

  • Import Swift files into the module you want.
  • Modify all swift declarations of classes, properties or methods you want to use in your module with @objc public in front of each declaration. Whereas classes don’t need @objc, just put public in front of it would be OK.
  • And for the left, do as what apple said here.

OK, there you go now 🙂