Android知识点:Webview

本文详细介绍了Android中WebView的使用,包括加载网页、与网页交互、潜在的安全问题及优化策略。强调了WebView的内存管理、JavaScript接口安全、页面加载速度优化等方面,提供了解决方案如本地资源预加载、缓存机制等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、概述

      webview是android承载网页的一个控件,使用的是android系统自带的webkit浏览器。

 

二、使用

  跟其他控件使用一样,webview可以以标签或者动态生成。

  1、loadUrl(String url)

       使用此方法加载网页url 加载网页

 

2、addJavascriptInterface(Object o, String name)

      android 承载 网页的时候,可能需要和网页交互,这时候此方法派上用场了。他提供给这个注入对象的方法,通过javascript作为中间桥梁传给网页,网页接收到android传输的对象,操作对象实现互通。使用此方法的前提是需要webView.getSettings().setJavaScriptEnabled(true),允许js注入。

 三、漏洞

  1、布局文件将webview写入容器的时候,记得要回收,不然会造成内存泄露。可以在页面销毁的时候 把 webview置空通知GC回收。(原因是开启了子线程)

  2、使用webview的时候,系统会单独开启一个进程,后台耗电。如果不销毁回收的话,会造成耗电损失。

  3、addJavascriptInterface安全漏洞问题。sdk 17 以前没有限制 使用 addJavascriptInterface对象方法,远程攻击者可通过java反射机制API利用漏洞执行任意java对象的方法,攻击或者获取隐私。解决办法是  sdk 17及以后通过@addJavascriptInterface方法注解限制使用js调用方法,解决任意调用java方法问题。在sdk17 之前,采用js 通过方法 prompt()方法,将特定的对象和方法传到Android端,Android 端在 onJsPrompt方法中拦截筛选出维护的方法,利用java反射,进行调用,实现调用安全。

 4、开启硬件加速的话,虽然可以加快渲染的速度,但是会出现白屏闪烁,解决办法就是不开启硬件加速。

 5、明文密码保存安全危险:webview默认保存setSavePassword(true),如果用户选择保存密码,将会保存到本地,存在密码安全问题。解决办法是密文保存,密文解密取出, 或者 setSavePassword(false)

 

四、WebView页面加载优化

    webview页面加载问题问题:  一般情况下webview加载网页比较慢,原因有以下几方面:

        1、网络图片资源等比较多,造成加载变慢

        2、html 要调用 css、js代码,而且js的解析过程复杂,使得加载过程变慢

        3、网页的网络请求问题造成加载慢,有时网络不好,一直出现一片空白的情况

        4、由于现在市面上Android机型碎片化,性能问题不可控,可能存在性能问题。

    这些问题都有可能导致webview加载网页速度变慢,以下提供了了几个方案解决上面问题。

解决方案:

      1、针对问题三,网络问题有时必无可避免时,可采取将进度条设置快加载完的假象,让用户增加耐心停留在网页加载页面。实则,这只是一个表面优化的方案,并不能改变webview的加载速度。

     2、本地预加载资源。先将图片资源等批量加载存储在本地,网页加载的时候优先从本地获取资源,这个方案大大的解决了由于资源加载过慢的问题。 不过会造成本地资源空间的堆积和资源更新问题。因此需要不定时清理本地资源缓存,和做好资源版本更新。

     3、webview自带的缓存机制(前端h5的缓存机制)

      4、Application Cache 缓存: 将加载过的网页 缓存到指定的本地缓存路径当中,android端通过settings.setAppCachePath(cacheDirPath) 是去实现存储路径。 只能解决第二次进去加载加快的问题。 比方案3的优势在于,不需要先请求网络。

     5、Dom Storage 缓存机制:跟 Application Cache 缓存差不多,不过Dom Storage 缓存机制是以键值对的方式存储,类似android的sp,也类型cookies,使用方法settings.setDomStorageEnabled(true);开启缓存方式

    6、IndexedDB 缓存机制:也是属于 NoSQL 数据库,通过存储字符串的 Key - Value 对来提供,存储 复杂、数据量大的结构化数据。使用settings.setJavaScriptEnabled(true);就开启了。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值