温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

安卓webview怎么缓存

发布时间:2026-10-10 22:21:17 来源:亿速云 阅读:114 作者:小樊 栏目:移动开发

在 Android WebView 中,“缓存”通常分 几种场景,不同需求用法不一样。下面按常见情况和做法说明。


一、WebView 自带的 HTTP 缓存(最常用)

WebView 底层用的也是 HTTP 协议,支持标准 HTTP 缓存(Cache-Control、ETag 等)。

1. 开启缓存(Java 示例)

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 就行,前端不用改。


二、AppCache(已废弃,不推荐)

旧方案:

settings.setAppCacheEnabled(true);
settings.setAppCachePath(getCacheDir().getAbsolutePath());

⚠️ Android 和 Web 标准已废弃 AppCache,不建议新项目使用。


三、缓存静态资源(H5 + 前端方案)

如果是 H5 页面,推荐前端自己做缓存:

1. Service Worker(最推荐)

  • 离线可用
  • 可控性强
  • 不受 WebView 限制

适合:

  • 混合开发
  • PWA
  • 离线 H5

四、Android 本地资源缓存(不走网络)

把 HTML / JS / CSS 放本地:

方式 1:assets 目录

webView.loadUrl("file:///android_asset/index.html");

方式 2:拦截请求(高级)

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 缓存

webView.clearCache(true);
// 或
context.deleteDatabase("webview.db");

六、推荐方案总结

场景 推荐方式
普通网页 HTTP 缓存
离线 H5 Service Worker
固定资源 assets / 拦截
新项目 不用 AppCache

如果你能说下 具体场景(比如:离线打开、加速加载、H5 游戏、小程序类),我可以直接给你一套最适合的方案和代码。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手