我正在创建一个新闻阅读器应用,有时会将网页加载到WebView
。
我注意到,使用默认行为时,缓存很快就会变得非常不合理。无论Android是否会在内存不足时清除缓存,我不满意我的用户看到15MB的新闻应用,除了网络缓存以外的所有内容都是1MB左右。
但是,我希望在某种程度上使用缓存。我看到了WebSettings #setAppCacheMaxSize(),看起来它只是票。
它似乎没有做任何事情。在将任何内容加载之前,我将以下内容硬编码到我的活动的onCreate()调用的方法中:
originalSourceWebView.getSettings().setAppCacheMaxSize(300*1024);
(我使用的是更大的可配置值,但是将其降低以确认我的问题)。
我没有大张旗鼓地向右吹300KB,如settings->applications->manage applications->click on my app
所示。我在WebChromeClient#onReachedAppMaxCacheSize中搜索事件,但似乎从未触发过。
有没有人成功使用过这个?我应该尝试管理一些不同的缓存吗?文档看起来很稀疏。我进入了android源代码,但它只是将值发送到本机代码,我不知道如何深入研究它。
我的测试环境是2.2.2的关联环境。我知道我需要通过反射来调用缓存以支持1.5和1.6,但是如果我不能完成这项工作,就没有必要。
答案 0 :(得分:6)
我不认为有一个API可以做你想要的。
setAppCacheMaxSize
限制HTML5应用程序缓存API的缓存大小 - HTML 5应用程序在WebView中运行时可以使用的脱机存储 - 但听起来您想要限制用于加载页面的缓存。图像等。
作为一种解决方法,您可以定期调用WebView.clearCache
,但这确实会限制缓存的有效性。如果您想尝试保留最近的一些页面,可以在清除缓存之前从CacheManager
获取它们,然后再恢复它们。