【发布时间】:2012-02-12 04:58:26
【问题描述】:
我的应用的主要活动是一个Activity,其中包含一个用于加载网页的Webview。
我重写了shouldOverrideUrlLoading(WebView view, String url) 方法,使每个URL 请求都调用Intent 并加载包含WebView 的新相同活动。
这样做是为了在按下 BACK 键时提供更好的体验,只会完成当前活动并返回之前的活动,与在单个 webview 中使用 goBack() 相比,无需时间再次渲染页面。
但现在的问题是,在我打开许多 URL 后,在后台创建了很长的活动队列,它使用的内存变得很大。
当我返回启动器并检查进度时,我可以看到我的应用缓存了超过 2 亿的数据。这是不可接受的……
有趣的是,我可以看到我的应用程序耗尽了我的内存,但是在 Eclipse 中 DDMS 的堆视图中,我可以看到应用程序分配的内存不超过 10M。所以我猜这200M是webStorage被Webview缓存的?
有没有办法控制内存?
我正在考虑一次只保存 5 层活动,然后返回 5 次就跳回主页。但是除了我需要的5个活动之外,我仍然不知道如何释放内存,我再也不会使用了?
或者如果是因为WebView 自动保持网页缓存,我该如何手动管理呢?比如设置最大缓存大小或页数的限制?
【问题讨论】:
-
对我来说,这是一个提高速度的残酷解决方案...覆盖后退按钮的工作方式并使用页面转到另一个活动对我来说并不是真正的解决方案。您应该尝试优化页面以更快地加载,但使用压缩图像、压缩图像等。您可能可以调用其他一些 WebView 方法和设置来尝试加快速度。
标签: android caching memory android-activity webview