美文网首页Android 杂货铺精选项目
android中使用WebView报出错误 Activity h

android中使用WebView报出错误 Activity h

作者: 汉谟拉比 | 来源:发表于2016-11-27 13:37 被阅读821次

最近项目要上线,检查了一下手机中关于项目的各种日志,突然发现使用WebView的Activity或者Fragment在退出的时候就报出如标题上的错误,但是我并没有在项目中使用TextToSpeech这个玩意。

然后参考stackoverflow上的解答http://stackoverflow.com/questions/18038772/leaked-window-exception-even-though-no-service-is-used发现mWebView.getSettings().setJavaScriptEnabled(true)代码会使webview中的TextToSpeech这个组件持有Activity的引用,这个组件的生命周期应该是比Activity的生命周期要长,所以它持有Activity的引用会造成内存泄露,dump一下内存发现,如下

发现这个Activity在我反复的进出进出居然有10个,而且在我触发多次gc内存回收之后,这10个Activity的仍然没有销毁,按照上述stackoverflow的解决方案,在onDestroy方法中执行如下操作 然而并没有什么卵用,还有一种解决方案就是说在代码中动态的生成webview,如下 这个方法起作用,但是改动太大,不可取.

又参考这位仁兄的方法http://blog.csdn.net/shareus/article/details/51742799,如下

发现logcat中在activity快进快出的时候尼玛仍然会报上述错误.。

按照stackoverflow上的说法,我传个activity的引用导致内存的泄露,那不传activity的引用,所以有了下面

,然后没报错了,尝试快进快出activity,产生了10个实例,但是gc后这10个activity的实例会被回收,但还是建议在onDestroy方法中加入上面这位仁兄这段代码

也不知道还有没有更好的解决方案,有的话告诉小弟一声。


相关文章

网友评论

  • Andy周:可以考虑把WebView放在一个独立进程中,通过进程间通信交互
  • c8112c64d105:你好,我也遇到这个问题了,我还是没解决呢?能不能向你请教一下?
  • 壹峰_:不错,帅。:+1:
  • hsiunien:需要注意的是如果你传给super是application ,那么页面中调用的一些原生控件将不可用比如 html 下拉列表选择框 需要注意!!

本文标题:android中使用WebView报出错误 Activity h

本文链接:https://www.haomeiwen.com/subject/wnygpttx.html