在 Android WebView 中,“缓存”通常分 几种场景,不同需求用法不一样。下面按常见情况和做法说明。
WebView 底层用的也是 HTTP 协议,支持标准 HTTP 缓存(Cache-Control、ETag 等)。
WebSettings settings = webView.getSettings();
settings.setCacheMode(WebSettings.LOAD_DEFAULT);
settings.setAppCacheEnabled(true);
settings.setDomStorageEnabled(true);
常见缓存模式:
LOAD_DEFAULT:默认,按 HTTP 头缓存LOAD_CACHE_ONLY:只从缓存加载LOAD_NO_CACHE:不使用缓存LOAD_CACHE_ELSE_NETWORK:有缓存就用缓存一般后端加好
Cache-Control就行,前端不用改。
旧方案:
settings.setAppCacheEnabled(true);
settings.setAppCachePath(getCacheDir().getAbsolutePath());
⚠️ Android 和 Web 标准已废弃 AppCache,不建议新项目使用。
如果是 H5 页面,推荐前端自己做缓存:
适合:
把 HTML / JS / CSS 放本地:
webView.loadUrl("file:///android_asset/index.html");
webView.setWebViewClient(new WebViewClient() {
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
if (url.contains("logo.png")) {
try {
InputStream is = getAssets().open("logo.png");
return new WebResourceResponse("image/png", "UTF-8", is);
} catch (IOException e) {
e.printStackTrace();
}
}
return super.shouldInterceptRequest(view, url);
}
});
webView.clearCache(true);
// 或
context.deleteDatabase("webview.db");
| 场景 | 推荐方式 |
|---|---|
| 普通网页 | HTTP 缓存 |
| 离线 H5 | Service Worker |
| 固定资源 | assets / 拦截 |
| 新项目 | 不用 AppCache |
如果你能说下 具体场景(比如:离线打开、加速加载、H5 游戏、小程序类),我可以直接给你一套最适合的方案和代码。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。