关于Webview面试详解

一、Webview常见的一些坑

1.Android API level 16以及之前的版本存在的远程代码执行安全漏洞,该漏洞源于程序没有正确限制使用WebView.addJavascriptinterface方法,远程攻击者可通过使用Java  Reflection API利用该漏洞执行任意Java对象的方法

(原理其实很简单,就是通过addJavascriptinterface方法,给webView加入了一个桥接口,而这个桥接口就可以通过调用来操作我们本地的Java接口,就是由于攻击者利用反射机制来调用那些未注册的其它java类,所以导致攻击者可以利用这个漏洞,对客户端进行各种违法的行为)

2.webview在布局文件当中的使用:webview写在其他容器中时

需要注意的是:当你离开的时候,需要销毁webview,这时候你在onDestory方法里面,一定要先把Linearlayout的webview给remove掉,然后再调用webView的removeonviews和webView的ondestory方法才能真正的销毁整个webview,而不会导致内存泄漏问题.

3.webView的Jsbridge

jsbridge作用是什么?其实就是Javascrip构建起的桥,让我们可以本地native端可以调用webjs的代码,同时也可以让远端web调用我们客户端native的代码.

4.webviewClient.onPageFinished -->WebChromeClient.onProgressChanged

.webviewClient.onPageFinished表示的是当你加载这个页面的时候,页面完成的时候会回调这个方法,但是这个方法有很多坑,它会判断你网页内容是否真的加载完毕了,而当前正在加载的网页,如果你产生跳转的时候,这个方法就会被调用无数次,所以说当你的webView需要加载各种各样的网页,并且需要在网页上面完成一些操作的时候,最好调用WebChromeClient.onProgressChanged这个方法.

5.后台耗电

当你的程序开启了WebView加载网页的时候,webView它会自己开启线程,如果你没有很好的将webView销毁的话,这些残余的线程就会一直在后台运行,而导致你的耗电量一直居高不下.所以,我采取在Activity.onDestroy()中直接调用System.exit(0)直接把虚拟机给关闭就不会有任何的webView问题

6.WebView硬件加速导致页面渲染问题

关于硬件加速,其实是从安卓3.0开始的,当我们开启硬件加速之后,webView的渲染页面它就更加加速,拖动起来会更加顺滑,但是有一个副作用,容易出现页面加载白块同时页面闪烁的现象,解决这个问题最好的办法是webView暂时关闭硬件加速.

7.在某些手机上,Webview有视频时,activity销毁后,视频资源没有被销毁,甚至还能听到在后台播放。即便是像刚才那样各种销毁webview也无济于事,解决办法:在onDestory之前修改url为空地址。

 

二、关于webview 的内存泄漏问题

先来说一下为什么会出现内存泄漏问题?

根本原因就是,我们WebView首先要关联一共Activity,而webView内部执行的操作是在新的线程当中,它时间我们Activity是没有办法确定的,Activity生命周期和新线程的生命周期它是不一样的,所以说导致了webView它会一直持有Activity的引用,不能回收,原理是和我们匿名内部类持有外部类的引用,导致外部类无法回收是一样的,为了避免内存泄漏,我们有两个做法:

1.独立进程,简单粗暴,不过可能涉及到进程间通信

独立进程:就是单独开启一个进程给webView进行操作

2.动态添加WebView,对传入WebView中使用Context使用弱引用,动态添加WebView意思在布局创建个ViewGroup用来放置WebView,Activity创建时add进来,在Activity停止时remove掉

 

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值