4

我在我的应用程序中使用 webview,它正在加载远程网页,然后socket.io通过 xhr-pooling 使用(node.js)。

问题是我无法通过socket.io. 例如,我的节点服务器每 10 秒执行一次io.emit,我的 webview 接收它并将其保存在:

/data/data/...../webviewCache

我不希望我的 webview 保存任何东西,因为随着时间的推移,这些文件的数量正在增加,它们并没有帮助我的应用程序运行得更快......

我试过了:

browser.getSettings().setCacheMode(2);   //(2 is LOAD_NO_CACHE)
browser.getSettings().setAppCacheEnabled(false);

但这些都不起作用。我的 webview 仍在将文件保存到缓存文件夹中。

此时,我设置了每 60 秒清空缓存文件夹的计时器,但这不是我想在生产中发布的解决方案......

我在这里遗漏了什么还是在android中禁用缓存存在错误?

更新1:经过一整天的调试,我发现了一些有趣的东西。Logcat 展示了两个有趣的东西:saveCacheFilegetCacheFile

然后我决定再次尝试关闭缓存...

browser.getSettings().setCacheMode(android.webkit.WebSettings.LOAD_NO_CACHE);

这实际上导致 WebView 不再从缓存中加载文件,但它仍在保存它们。日志猫说这样的话:

saveCacheFile for url .../socket.io/1/xhr-polling/BLNN28E7S4PZJsy2pWaF?t=13537

所以我相信实际的问题是,如何防止 webview在每个请求上保存缓存文件。

4

2 回答 2

1

在 URL 的查询部分添加随机字符串怎么样?这个技巧在某些情况下有效。

于 2013-06-20T12:59:43.880 回答
0

我找到的唯一解决方案是在 HTTP 响应标头中发送“Cache-Control: no-store”。

于 2019-12-05T20:11:39.300 回答