代码之家  ›  专栏  ›  技术社区  ›  sidd

WebView不缓存

  •  1
  • sidd  · 技术社区  · 6 年前

    我一直在尝试在android webview中启用缓存,但是我看到的每个配置都以失败告终。

    以下是我的资料:

    我有一个网页,里面有一个iframe,循环加载10-12页,所有这些页中的内容都有 Cache-Control: max-age=86400 标题。

    如果我在浏览器中正常加载这些页面,它们就会工作,页面会被缓存。

    这是我的配置

            getSettings().setJavaScriptEnabled(true);
            getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
            getSettings().setDomStorageEnabled(true);
            getSettings().setMediaPlaybackRequiresUserGesture(false);
            getSettings().setAppCacheEnabled(true);
            getSettings().setAppCachePath(context.getCacheDir().getAbsolutePath());
            getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
    

    这些设置适用于媒体播放和启用JS

    编辑

    我建立了一个新的应用程序,并尝试用 loadUrl 方法,并在网络关闭时用按钮重新加载,它可以在没有Internet的情况下重新加载该页,这意味着它缓存了该页。

    所以问题是WebView不缓存页面加载的页面。

    如果有人知道如何缓存WebView页面加载的内容,这将是一个很大的帮助。

    -谢谢

    2 回复  |  直到 6 年前
        1
  •  0
  •   SamiAzar    6 年前

    此代码解决了我的问题,希望也能帮助您:

    webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
    

    编辑: 另外,您不需要这些行:

    getSettings().setAppCacheEnabled(true);
    
     getSettings().setAppCachePath(context.getCacheDir().getAbsolutePath());
    

    取出并再次检查。 AppCache 设置与所需的缓存类型无关。

        2
  •  0
  •   sidd    6 年前

    因此,在对iFrame和Android设备进行了一系列详细测试之后,我开始意识到WebView不会缓存大于特定大小的文件。

    我的一个被iframe加载的页面有一个30MB的视频,没有被缓存,导致了巨大的数据消耗。(每2分钟渲染一次)

    我把它降到10MB,但它仍然没有缓存,最后我把它降到980KB,它开始缓存。

    我不确定WebView的每个文件的缓存限制,但我遇到了一个有趣的错误 here Android 4.3之后的状态是,总缓存限制被硬编码为20MB,我们可以在这里找到 file 在第98行。

    如果有人知道这些限制在哪里被记录下来,请在这里回复让社区知道。