android中使用WebView报出错误 Activity has leaked ServiceConnection android.speech.tts.TextToSpeech$Connection@59d94f0 that was originally bound here

最近项目要上线,检查了一下手机中关于项目的各种日志,突然发现使用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方法中执行如下操作
android中使用WebView报出错误 Activity has leaked ServiceConnection android.speech.tts.TextToSpeech$Connection@59d94f0 that was originally bound here_第1张图片
然而并没有什么卵用,还有一种解决方案就是说在代码中动态的生成webview,如下
android中使用WebView报出错误 Activity has leaked ServiceConnection android.speech.tts.TextToSpeech$Connection@59d94f0 that was originally bound here_第2张图片
这个方法起作用,但是改动太大,不可取.

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

android中使用WebView报出错误 Activity has leaked ServiceConnection android.speech.tts.TextToSpeech$Connection@59d94f0 that was originally bound here_第3张图片

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

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

android中使用WebView报出错误 Activity has leaked ServiceConnection android.speech.tts.TextToSpeech$Connection@59d94f0 that was originally bound here_第4张图片
,然后没报错了,尝试快进快出activity,产生了10个实例,但是gc后这10个activity的实例会被回收,但还是建议在onDestroy方法中加入上面这位仁兄这段代码
android中使用WebView报出错误 Activity has leaked ServiceConnection android.speech.tts.TextToSpeech$Connection@59d94f0 that was originally bound here_第5张图片

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


你可能感兴趣的:(android中使用WebView报出错误 Activity has leaked ServiceConnection android.speech.tts.TextToSpeech$Connection@59d94f0 that was originally bound here)