WebView 避免内存泄露的方法

最近遇到一个Webview内存泄露的问题,上网查了一些结果,在此记录一下:

webview在android系统中属于一个比较特殊的view,在调用
webview.destroy()的时候,必须确保webview已经从view
tree中被删除,否则这个函数不会执行的。如本app中的用法,在xml中静态定义的webview,只有在整个view退出后调用
webview.destroy()才会被正确执行,但整个view退出后又找不到webview了,这个是很矛盾的。

所以android给出的解决方案是,不要在xml中定义webview,在xml中只定义view,然后在需要webview的时候,创建一个webview,并把webview放到定义好的view的位置。
在删除得的时候,先把webview从parent view中删除,然后释放,就不会有问题了。

在应用层修改如下:
    WebView    mWebView = new WebView(getApplicationgContext());
    LinearLayout mll  = findViewById(R.id.xxx);
    mll.addView(mWebView);

protected void onDestroy() {
          super.onDestroy();

mll.removeView(wv);  //从布局中移除webView

mWebView.removeAllViews();
          mWebView.destroy()
    }

参考资料:http://my.oschina.net/zhibuji/blog/100580

时间: 2024-10-12 07:38:33

WebView 避免内存泄露的方法的相关文章

关于WebView的内存泄露 Leaked webview

[leaded webview  和WebView内存泄露问题解决方法] 解决方法1: 解决方法2 . 在Fragment回收Webview的时候注意一下. 就是讲他父控件里的内容清空: 参考:http://stackoverflow.com/questions/3130654/memory-leak-in-webview# by :   lixiaodaoaaa 微信同号 来自为知笔记(Wiz)

C#防止内存泄露的方法

一般程序员()都会这样认为:用C#这样的语言编程的一个好处就是无需再考虑内存的分配和释放.你只需创建对象,然后通过一种叫做垃圾收集的机制来处理这 些对象,也就是说:当它们不再被应用程序需要的时候来自动的清除这些对象.这个过程意味着C#解决了其它语言中极难处理的问题──可怕的内存泄露.真的是 这样吗?      其实不然,让我们先了解一下垃圾收集的工作原理.垃圾收集器的工作就是寻找那些不再被应用程序需要的对象,当它们不会再被访问或引用的时候清除它们.(一定要注意是在不会再被访问或引用的时候才清除它

C++内存泄露检查方法

重载全局new 可以写多个版本的new,却只有一个delete: 重载全局new会发生一些不匹配的串扰,尤其是有第三方库的情况下: 我的解决办法 重载单个class的new: 原始类型不能重载,那就使用类似于malloc的办法分配: 我的cfan开源库实现了这个方法 操作系统hook机制 http://my.oschina.net/chunquedong/blog/271248 这些都不跨平台,使用也不方便: valgrind等工具 不跨平台: 除非能实现持续集成,否则很难及时反馈: 有时候引起

Flex内存泄露解决方法和内存释放优化原则

本文向大家简单介绍一下Flex内存泄露问题,主要包括Flex内存释放优化原则和Flex内存泄露解决方法两大部分内容,希望你会感兴趣. 作者:vipoyb来源:csdn.net|2010-07-29 14:08   你对Flex内存泄露的概念是否了解,这里和大家分享一下Flex内存释放优化原则和Flex内存泄露解决方法,希望本文的介绍能让你有所收获. Flex内存释放优化原则 1.被删除对象在外部的所有引用一定要被删除干净才能被系统当成垃圾回收处理掉: 2.父对象内部的子对象被外部其他对象引用了,

Tomcat内存泄露解决方法

环境: 今天早上,实施人员找我说,部署在tomcat上的一个项目总是间隔一段时间就自动关闭了,我询问一些可能发生的情况后,我就找了tomcat下的日志文件catalina.2015-04-13.log,localhost.2015-04-13.log这两文件,经过一番查找后,看到了下面一段 异常详细信息介绍: http://confluence.atlassian.com/pages/viewpage.action?pageId=218275753 原因大概是说tomcat 6.025之后引入了

pomelo内存泄露排查方法

工具: node-inspector pomelo-cli chrome 步骤 通过pomelo-cli中的dump memory,导出当前服务器的内存堆栈文件:dump1.heapsnapshot. 服务器运行指定模块一段时间后,导出堆栈文件:dump2.heapsnapshot. 用chrome 读取堆栈文件:打开开发者工具->Profiles->Load->选择堆栈文件.先load 前面的dump1,再Load dump2. 在Profiles的左侧会有份文件列表,重点看两份的差异

UIWebView内存泄露问题解决方法

1.在收到内存警告的时候,清除缓存内容. - (void)applicationDidReceiveMemoryWarning:(UIApplication*)application {     [[NSURLCache sharedURLCache] removeAllCachedResponses]; } 2.释放UIWebView的时候 _webView.delegate = nil; [_webView loadHTMLString:@"" baseURL:nil]; [_we

关于WebView的内存泄露问题

在一个Activity中包含着一个WebView,通过WebView不停的访问Web页面,会发现内存会一直增长,退出此Activity,甚至杀死此Activity,内存依然没有被释放.这就导致,即使是完全退出了整个APP,内存也没有被释放掉,机器会表现的越来越很慢.当时网上都说是Android系统本身的问题,就没有再继续深究了.此现象在2.X版本中会出现,在4.X版本中不会出现,所以猜测新的Android系统已经修复了此问题. 今天又遇到此问题,也算是缘分.于是再次简单搜索一下,惊喜看到网上已经

使用mfc CHtmlView内存泄露解决方法

第一步,谷歌有文章说CHtmlView部分api使用BSTR没释放: 解决方法是重写一下接口: CString GetFullName() const; CString GetFullName() const; CString GetType() const; CString GetLocationName() const; CString GetLocationURL() const; void Navigate(LPCTSTR URL, DWORD dwFlags = 0, LPCTSTR