WebView面试详解

1、WebView常见的一些坑

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

1.2webView在布局文件中的使用,webView写在其他容器中时

动态添加webview,对传入webview中使用的Context使用弱引用,动态添加webview意思在布局创建个viewGroup用来放置webview,Activity创建时add进来,在Activity停止时remove掉。否则你在webview调用destory时,webview仍绑定在Activity上,容易引起内存泄露。因此需要先从父容器中移除webview,然后再销毁webview:

rootLayout.removeView(webView);

webView.destroy();

1.3jsbride

通过jsbride可以实现H5和native层方法互调

1.4webviewClient.onPageFinished->webChromeClieent.onProgressChanged

onPageFinished:页面加载完成的时候会回调这个方法,但是这个方法有缺陷如果当前正在加载的网页产生跳转的时候这个方法可能会被多次调用。所以需要尽量避免在onPageFinished()中做业务操作,否则会导致重复调用,还有可能会引起逻辑上的错误。所以建议使用onProgressChanged

1.5后台耗电

当你的程序调用了WebView加载网页,WebView会自己开启一些线程,如果你没有正确地将WebView销毁的话,这些残余的线程。会一直在后台运行,由此导致你的应用程序耗电量居高不下。对此我采用的处理方式比较偷懒,简单又粗暴(不建议),即在Activity.onDestroy()中直接调用System.exit(0),使得应用程序完全被移出虚拟机,这样就不会有任何问题了

1.6webview硬件加速导致页面渲染问题

webview开启硬件加速之后,页面的滑动会更加顺畅。但是也有一个问题易出现页面加载白块和页面闪烁的现象。解决方法就是关闭硬件加速。

1.7数据积累问题

开启缓存什么的有利于网页的浏览体验,但你会发现即使是清除了必要的内容,比如Cache、Cookie、Form Data、History、Password等等东西,你的应用程序所占用的存储空间还是会越来越大,到最后只好手动到系统设置的应用信息界面里清除数据了

2、关于WebView内存泄露问题

泄露原因:WebView会关联一个Activity,而WebView内部执行的操作是在一个新的线程当中。执行时间其实Activity是没有办法确定的,Activity的生命周期和这个新线程的生命周期是不一样的。所以就导致了这个WebView会一直持有这个Activity的引用,不能回收。

2.1独立进程,简单暴力,不过可能涉及到进程间通信

<android:name=".WebviewActivity"

android:process=":h5"

android:screenOrientation="portrait"

android:configChanges="orientation|screenSize|keyboardHidden"

/>

每个独立的进程都能分配独立的内存,这样的话,你的app可以获得双倍的内存,其中一半给Webview吃。增大Webview获得的内存,变相的减小内存泄露产生OOM的概率。

在适当时机直接杀掉Webview独立进程,什么内存泄露,内存占用巨大的问题都见鬼去吧。要问什么时机?比如退出app时,检测到没有Webview页面时。

Webview发生崩溃时不会导致app闪退,因为Webview是在独立进程中,如果发生崩溃,主进程还安然无事,app还在运行中,没有闪退。

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,123评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,031评论 2 384
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,723评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,357评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,412评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,760评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,904评论 3 405
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,672评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,118评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,456评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,599评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,264评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,857评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,731评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,956评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,286评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,465评论 2 348

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,743评论 25 707
  • 一、WebView 常见的一些坑 1. webview 在android api16以及之前版本的安全漏洞,该漏洞...
    千涯秋瑟阅读 1,917评论 1 17
  • 一.Webview常见的一些坑 1.Android API level 16以及之前的版本存在远程代码执行安全漏洞...
    xiaolong20阅读 271评论 0 0
  • 3月27日正式入小灶群,开始的几天活力满满,像注了鸡血一样,改了以往午睡的习惯,用来写晨读,看书,晚上哄女儿睡着以...
    留逝时光阅读 282评论 1 7
  • 这算性骚扰吗?—— 一次和老婆正在逛街, 走着走着两人讨论起性骚扰的问题。 我突然伸手快速的摸了一下老婆的胸部, ...
    范末末阅读 242评论 2 2