1、webview常见的一些坑
1)android API level 16 以及以前的版本存在远程代码执行漏洞,该漏洞由于程序没有正确限制使用webview.addJavascriptInterface方法,远程攻击者可以通过使用Java ReflectionAPI利用该漏洞执行任意Java对象方法。
2)webview在布局文件中的使用:webview写在其他容器时,需要注意的是,当你需要销毁webview的时候,在onDestory方法里面先把LinearLayout里面的webview Remove掉然后再调用webview的removeAllViews和webview的destory方法这样才真正的销毁整个webview而不会导致内存泄漏问题。
3)jsbridge:是一个很热门的技术,他是一个通过JavaScript与Java构建一个桥实际上JsBridge的却是Js和Native之前的一种通讯方法。简单地说,JsBridge就是定义Native和Js的通讯,Native只通过一个固定的对象调用Js,Js也只通过固定的对象调用Native。
4)webviewClient.onPageFinished->webChromeClient.onProgressChanged,前者就是表示当加载完成页面的时候就会回调onPageFinished这个方法,这个方法会判断你这个网页是否真的加载完毕,当前正在加载的网页如果你产生跳转的时候这个方法就会被调用无数次,当你的加载各种各样的网页的时候并且要完成一些操作的时候最好还是调用webChromeClient.onProgressChanged这个方法。
5)后台耗电:当程序开启webview加载网页的时候webview会自己开启线程,如果没有很好将webview销毁的话残余的线程就会一直在后台运行,导致引用程序耗电量居高不下。可以采取在Activity的onDestory方法里面销毁WebView。
6)webview硬件加速导致页面渲染问题:容易出现页面加载带块同时界面闪烁的现象。解决办法是,设置webview暂时关闭硬件加速。
2、关于webview的内存泄露问题
1)独立进程就是开启一个单独的进程给webview操作、简单暴力、不过可能涉及到进程间的通信。
2)动态添加webview,传入webview中使用的Context使用弱引用,动态添加webview意思是在布局中创建一个viewgroup用来放置webview,Activity创建add进来,在activity停止时remove掉。