用AI赚第一桶💰低成本搭建一套AI赚钱工具,源码可二开。 广告
![](https://markdown-1258186581.cos.ap-shanghai.myqcloud.com/20190606104746.png) ## WebView 的一些坑 1. Android 16 及其以前的版本存在远程代码执行安全漏洞,该漏洞源于程序没有正确的限制使用 WebView.addJavascriptInterface 方法,远程攻击者可以通过 Java Reflection(反射)API利用该漏洞任意执行 Java 对象的方法。 2. WebView 内存泄漏。要先从父 View 移除 WebView 以后,再销毁 WebView 3. webviewClient.onPageFinished 方法可能存在无限跳转问题,而 WebChromeClient 的 onProgressChanged方法更加靠谱点。 4. 后台耗电:开启了 Webview 以后, WebView 开启了单独的进程,如果没有及时的销毁,可能这些子线程一直在运行,耗电增加 5. WebView 硬件加速导致页面渲染问题(暂时关闭 硬件加速) ## 解决WebView 的内存泄漏问题 WebView 执行操作的时候,是在新的线程中的,但是在创建 WebView 的时候会关联我们的 Activity。 Activity 的生命周期和 WebView 线程的生命周期是不一样的,如果这个时候 Activity 销毁了,但是 WebView 还是在运行的,导致 WebView 会一直持有 Activity 的引用,不能让 Activity 回收,就导致了内存泄漏。 1. 开启一个进程,让 WebView 独立运行在一个进程 2. 创建 WebView 的时候使用 ApplicationContext,或者对传入的 Context 使用弱引用。创建完毕以后动态添加到 父 VIew。然后在 Activity 销毁的时候先从父 View 移除,然后再销毁 WebView。