本博客是对WebView基本面试知识的一个小结,该博客复制参考了Hensen_,感谢原文博主的分享,在前人的基础上做了补充,方便后期知识的回顾。
WebView是一个基于webkit引擎、展现web页面的控件。
1、WebView安全漏洞
API16之前存在远程代码执行安全漏洞,该漏洞源于程序没有正确限制使用WebView.addJavascriptInterface方法,远程攻击者可通过使用Java反射机制利用该漏洞执行任意Java对象的方法。
2、WebView销毁步骤
[1] webView的父容器将WebView移除;
[2] webView.removeAllViews();
[2]. webView.destroy()进行销毁;
3、WebView的jsbridge
客户端和服务端之间可以通过Javascript来互相调用各自的方法,是JS和Native之间的一种通信方式。
4、WebViewClient的onPageFinished.
WebViewClient的onPageFinished在每次加载完成页面的时候调用,但是遇到未加载完成的页面跳转其他页面时,就会重复多次调用,使用WebChromeClient.onProgressChanged可以替代。
5、WebView后台耗电
在WebView加载页面的时候,会自动开启线程去加载,如果不很好的关闭这些线程,就会导致电量消耗加大,可以采用暴力的方法,如果你的webView是运行在独立的进程中,可以直接在onDestroy方法中System.exit(0)结束当前正在运行中的java虚拟机。
6、WebView硬件加速
Android3.0引入硬件加速,默认会开启,WebView在硬件加速的情况下滑动更加平滑,性能更加好,但是会出现白块或者页面闪烁的副作用,建议WebView暂时关闭硬件加速。
7、WebView内存泄漏
由于WebView是依附于Activity的,Activity的生命周期和WebView启动的线程的生命周期是不一致的,这会导致WebView一直持有对这个Activity的引用而无法释放,解决方案如下
[1] 独立进程,简单暴力,不过可能涉及到进程间通信(推荐);
[2] 代码中动态添加WebView,对传入WebView中使用的Context使用弱引用;