今天逛知乎的时候,看到一个有关安卓开发中,WebView 的问题,算是开发中比较常见的问题了吧,而且赞同数比较多的答案,确实回答得还不错,这里就整理了一下,避免开发中,遇到类似问题凌乱吧。 WebView 的坑很多,主要的比较让人疑惑的坑有如下几个:
1、WebViewClient.onPageFinished()。你永远无法确定当WebView调用这个方法的时候,网页内容是否真的加载完毕了。当前正在加载的网页产生跳转的时候这个方法可能会被多次调用。所以当你的WebView需要加载各种各样的网页并且需要在页面加载完成时采取一些操作的话,可能WebChromeClient.onProgressChanged()比WebViewClient.onPageFinished()都要靠谱一些。
2、WebView后台耗电问题。当你的程序调用了WebView加载网页,WebView会自己开启一些线程,如果你没有正确地将WebView销毁的话,这些残余的线程会一直在后台运行,由此导致你的应用程序耗电量居高不下。对此比较简单粗暴的方式是,在 Activity.onDestroy()中直接调用System.exit(0),使得应用程序完全被移出虚拟机,这样就不会有任何问题了。
3、切换WebView闪屏问题。如果你需要在同一个ViewGroup中来回切换不同的WebView(包含了不同的网页内容)的话,你就会发现闪屏是不可避免的。这应该是Android硬件加速的Bug,如果关闭硬件加速这种情况会好很多,但无法获得很好的浏览体验,你会感觉网页滑动的时候一卡一卡的,不跟手。
4、数据积累问题。开启缓存什么的有利于网页的浏览体验,但你会发现即使是清除了必要的内容,比如Cache、Cookie、Form Data、History、Password等等东西,你的应用程序所占用的存储空间还是会越来越大,到最后只好手动到系统设置的应用信息界面里清除数据了 。
5、滚动条问题。Android System WebView的横向滚动条真是好粗的有木有...
6、webview原生支持js与native代码交互,可惜在4.2以下版本上有安全漏洞,当时被乌云报出来,事情还挺大,各大浏览器厂商都紧急应对,我们也还是想了其他办法,解决了这个问题。 上面的这些Android WebView中的坑,大家在安卓开发中,肯定都真真切切的遇到过。其实WebView的坑,究其根本大部分都是Webkit等内核的坑,是它发展过程中遇到的一些遗留问题。有些问题可能我们除了正确面对外,别无他法,但是有的问题,我们还是可以进行优化、改进的。 |