WebView缓存不生效,页面总是重新加载怎么办?

燕燕酱~ 阅读 60

我在做Hybrid App时,用WebView加载H5页面,明明设置了缓存策略,但每次打开都重新请求资源,根本没走缓存,特别慢。

我试过在Android里设置webView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);,也确认服务器返回了Cache-Control头,但还是不行。是不是哪里漏了?

我来解答 赞 4 收藏
二维码
手机扫码查看
1 条解答
码农柯豪
这个问题很常见,主要是你可能漏了几个关键配置,光设CacheMode不够。

Android WebView要完整启用缓存,得同时设置这么几个东西:

WebSettings webSettings = webView.getSettings();

// 1. 启用缓存
webSettings.setAppCacheEnabled(true);
webSettings.setDatabaseEnabled(true);
webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);

// 2. 设置缓存路径和大小(重要!)
webSettings.setAppCachePath(context.getCacheDir().getAbsolutePath());
webSettings.setAppCacheMaxBytes(10 * 1024 * 1024); // 10MB

// 3. 允许H5使用本地存储
webSettings.setDomStorageEnabled(true);
webSettings.setDatabaseEnabled(true);


另外检查一下你的H5页面请求URL,看看是不是脑子抽风在后面加了时间戳或者随机数,比如 xxx.js?t=123456 或者 xxx.js?_=xxx,这样每次请求URL都变了,缓存当然不生效。

如果你是做离线包或者资源预加载那种,得手动把资源存到本地,然后用file://协议加载:

// 加载本地文件
webView.loadUrl("file:///android_asset/index.html");

// 或者加载本地HTML
webView.loadDataWithBaseURL("file:///android_asset/", htmlContent, "text/html", "UTF-8", null);


还有一种情况是服务端返回的Cache-Control可能没设对,确认一下是不是 max-age 太小了,或者用了 no-store,那玩意儿是禁止缓存的。

这几个地方都检查一下,基本就能解决。
点赞
2026-03-11 15:10