当前位置: 网站首页 >安卓软件 >系统优化 > WebView安卓最新版下载
WebView安卓最新版游戏图标

WebView安卓最新版


WebView安卓最新版是Android操作系统中的一个组件,它允许Android应用程序在应用程序的用户界面内显示网页内容。它充当了一个Web浏览器引擎,负责渲染网页、执行JavaScript代码和处理其他与Web相关的功能。
当前版本: v128.0.6613.127文件大小: 221.9M更新时间: 2024-09-09 16:57:09
游戏平台: 安卓 游戏类型: 系统优化
WebView安卓最新版手机扫描下载
WebView安卓最新版介绍

WebView安卓最新版是Android操作系统中的一个组件,它允许Android应用程序在应用程序的用户界面内显示网页内容。它充当了一个Web浏览器引擎,负责渲染网页、执行JavaScript代码和处理其他与Web相关的功能。在Android 7.0(Nougat)之前,WebView作为一个单独的应用程序捆绑在一起,并通过Google Play商店进行更新。从Android 7.0开始,WebView成为一个系统组件,通过常规系统更新进行更新。

许多Android应用程序,特别是那些包含网页内容或基于Web的功能的应用程序,依赖于WebView来显示网页或与Web服务进行交互。通过利用WebView,开发人员可以无缝地在其应用程序中嵌入网页内容,从而创建更加集成的用户体验。通过WebView显示的Web内容通常基于设备上默认的Web浏览器使用的相同渲染引擎,例如Google Chrome或Android浏览器(在Chrome成为默认浏览器之前使用的浏览器)。这样可以确保开发人员在不同的应用程序中提供一致的Web体验,并确保与Web标准和技术的兼容性。

webview是什么

webview是一个可视化的组件,是作为原生APP的视觉部分。可以内嵌在移动端,实现前端的混合式开发,大多数混合式开发框架都是基于WebView模式进行二次开发的。比如:APIcloud、uni-app等等的框架。

一、webview入门知识

1、我们通常是用浏览器来浏览网页,你很清楚的知道你正在使用浏览器,要么是PC客户端,要么是手机上的app。但是webview是一个嵌入式的浏览器,是嵌入在原生应用中的,你可能都意识不到你在用浏览器。

2、传统浏览器分为两个部分,UI(地址栏、导航栏)和浏览器引擎。webview就是原生应用中的浏览器引擎。

3、webview只是一个可视化的组件,是作为原生APP的视觉部分。

4、用webview展示的内容是不需要存储在本地的,可以直接从服务器获取。

5、这种灵活性打开了浏览器端的web应用和希望展示在原生应用中的web应用代码直接可重用的世界。

6、运行在webview中的JS代码有能力调用原生的系统API,没有传统浏览器沙箱的限制。

7、沙箱的存在是因为,你永远不能完全信任加载的web内容,所以不能允许它调用原生的系统API。而在webview中开发人员通常可以完全控制加载的内容,恶意代码进入并在设备上造成混乱的可能性很低。

8、在webview中,JS代码可以跟原生应用代码相互通信,也可以调用原生API集成酷炫的系统级功能,如传感器、存储、日历、联系人等。

二、webview的用法

1、作为APP内置浏览器,显示链接的内容。

2、用来显示广告。

3、完全承载APP内的所有交互。从技术角度看这些仍是原生应用,但它做的唯一原生操作就是托管webview,这种应用被称为混合应用。从部署和更新的角度来看,混合应用非常方便。

4、作为原生应用的扩展。许多原生应用会提供加载项或扩展程序来扩展其功能,由于web技术的简单性和强大,这些加载项和扩展通常以HTML、CSS、JS而不是C++、C#或其他来构建。

三、webview的精髓

webview其实只是一个再应用中设置好位置和大小的浏览器,而且不会放置任何花哨的UI。

在大多数情况下,除非你调用了原生API,否则不必在webview中专门测试web应用。

WebView的几个常见功能使用方法

android的WebView组件可以说是相当的强大,现将项目中经常用到的几个功能总结如下:

一、背景设置

WebView安卓最新版(图1)

WebView.setBackgroundColor(0);//先设置背景色为transparent

WebView.setBackgroundResource(R.drawable.yourImage);//然后设置背景图片

二、获得WebView网页加载初始化和完成事件

步骤:

1、创建一个自己的WebViewClient(继承 WebViewClient 类)如WebViewClient

2、重载里面的 onPageFinished(WebView view, String url)方法,(webview加载完成会调用这个方法),这个方法放自己想要做的事情,在webview加载完成以后

3、关联你自己的webviewclient 与 webview 通过 这个方法:webView.setWebViewClient( new WebViewClient();

WebView安卓最新版(图2)

如果需要监视加载进度的,需要创建一个自己的WebChromeClient类,并重载方法onProgressChanged,再

WebView安卓最新版(图3)

布局文件:

WebView安卓最新版(图4)

要注意的是,其中的webView的一系列用法,比如 webView.getSettings()。setJavaScriptEnabled(true);设置可以使用javscript;

WebView安卓最新版(图5)

等等,具体参考API

而进度条的使用是在new出一个setWebChromeClient后,可以在内部类中写 onProgressChanged事件

总结:在WebView的设计中,不是什么事都要WebView类干的,有些杂事是分给其他人的,这样WebView专心干好自己的解析、渲染工作就行了。
WebViewClient就是帮助WebView处理各种通知、请求事件的,具体来说包括:

onLoadResource

onPageStart

onPageFinish

onReceiveError

onReceivedHttpAuthRequest

WebChromeClient是辅助WebView处理Javascript的对话框,网站图标,网站title,加载进度等

onCloseWindow(关闭WebView)

onCreateWindow()

onJsAlert (WebView上alert是弹不出来东西的,需要定制你的WebChromeClient处理弹出)

onJsPrompt

onJsConfirm

onProgressChanged

onReceivedIcon

onReceivedTitle

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持3322。

Android WebView的具体实现与Chromium渲染引擎启动过程

这里以Android 8.0的源码为来说明,是先找到WebView的真正的构造函数:

WebView安卓最新版(图6)

这个构造函数会调用另外一个成员函数ensureProviderCreated()确保Chromium动态库已经加载。在Chromium动态库已经加载的情况下,WebView类的成员函数ensureProviderCreated还会创建一个WebViewProvider对象,并且保存在成员变量mProvider中。这个WebViewProvider其实才是真正用来实现WebView的功能的幕后大佬。上诉那些Android WebView主要的方式基本都是通过mProvider来实现的,例如loadUrl(String url)等方法。

WebView安卓最新版(图7)

有了这个mProvider之后,WebView类的构造函数就会继续调用mProvider.init(javaScriptInterfaces, privatepowsing)启动网页渲染引擎。对于基于Chromium实现的WebView来说,它使用的WebViewProvider是一个WebViewChromium对象。当这个WebViewChromium对象的成员函数init被调用的时候,它就会启动Chromium的网页渲染引擎。

所以,我们接下来看一下ensureProviderCreated的实现:

WebView安卓最新版(图8)

WebView类的成员函数ensureProviderCreated首先调用成员函数checkThread确保它是在WebView的创建线程中调用的,接下来又会判断成员变量mProvider的值是否为null。如果为null,就表示它还没有当前创建的WebView创建过Provider。在这种情况下,它首先会调用成员函数getFactory获得一个WebViewFactory。有了这个WebViewFactory之后,就可以调用它的成员函数createWebView创建一个WebViewProvider。

接下来我们再看一下getFactory()方法以及它的实现:

WebView安卓最新版(图9)

getFactory返回的WebView Factory是通过调用WebViewFactory类的静态成员函数getProvider获得的,getProvider首先是判断静态成员变量sProviderInstance的值是否等于null。如果等于null,那么就说明当前的App进程还没有加载过Chromium动态库。在这种情况下,就需要加载Chromium动态库,并且创建一个WebView Factory,保存在静态成员变量sProviderInstance。接下来我们就先分析Chromium动态库的加载过程,然后再分析WebView Factory的创建过程。

加载Chromium动态库是通过调用WebViewFactory类的静态成员函数loadNativeLipary实现的:

WebView安卓最新版(图10)

loadNativeLipary首先会调用成员函数getWebViewNativeLiparyPaths获得要加载的Chromium动态库的文件路径,然后再调用另外一个静态成员函数nativeLoadWithRelroFile对它进行加载。在加载的时候,会指定一个Chromium GNURELRO Section文件。这个Chromium GNURELRO Section文件是系统启动时候,通过启动一个临时进程生成的。其中静态成员函数nativeLoadWithRelroFile是一个JNI方法,它由C++层的函数LoadWithRelroFile实现:

WebView安卓最新版(图11)

LoadWithRelroFile判断自己是32位还是64位的实现,然后从参数lib32和lib64中选择对应的Chromium动态库进行加载。

这个加载过程是通过调用另外一个函数DoLoadWithRelroFile实现的:

WebView安卓最新版(图12)

函数DoLoadWithRelroFile的实现是通过Linker导出的函数androiddlopenext在Zyogote进程保留的地址空间中加载Chromium动态库的。注意,App进程是Zygote进程fork出来的,因此它同样会获得Zygote进程预留的地址空间。不过,函数DoLoadWithRelroFile会将告诉函数androiddlopenext在加载Chromium动态库的时候,将参数relro描述的Chromium GNURELRO Section文件内存映射到内存来,并且代替掉已经加载的Chromium动态库的GNURELRO Section。这是通过将指定一个ANDROIDDLEXTUSERELRO标志实现的。之所以可以这样做,是因为参数relro描述的Chromium GNURELRO Section文件对应的Chromium动态库的加载地址与当前App进程加载的Chromium动态库的地址一致。只要两个相同的动态库在两个不同的进程中的加载地址一致,它们的链接和重定位信息就是完全一致的,因此就可以通过文件内存映射的方式进行共享。共享之后,就可以达到节省内存的目的了。

这一步执行完成之后,App进程就加载完成Chromium动态库了。回到前面分析的WebViewFactory类的静态成员函数getProvider,它接下来继续创建一个WebViewFactory。这个WebViewFactory以后就可以用来创建WebViewProvider。

WebViewFactory类的静态成员函数getProvider首先要确定要创建的WebView Factory的类型。这个类型是通过调用另外一个静态成员函数getFactoryClass获得的:

WebView安卓最新版(图13)

从这里可以看到,WebViewFactory类的静态成员函数getFactoryClass返回的WebView Factory的类型为com.android.webview.chromium.WebViewChromiumFactoryProviderForO。这个com.android.webview.chromium.WebViewChromiumFactoryProviderForO类是由前面提到的WebView Package提供的。这意味着WebViewFactory类的静态成员函数getProvider创建的WebView Factory是一个WebViewChromiumFactoryProvider对象:

WebView安卓最新版(图14)

WebViewChromiumFactoryProvider类的构造函数会调用AwpowserProcess类的静态成员函数loadLipary对前面加载的Chromium动态库进行初始化:

WebView安卓最新版(图15)

AwpowserProcess类的静态成员函数loadLipary又调用LiparyLoader类的静态成员函数loadNow对前面加载的Chromium动态库进行初始化:

WebView安卓最新版(图16)

LiparyLoader类的静态成员函数loadNow又调用另外一个重载版本的静态成员函数loadNow对前面加载的Chromium动态库进行初始化:

WebView安卓最新版(图17)

LiparyLoader类重载版本的静态成员函数loadNow又调用另外一个静态成员函数loadAlreadyLocked对前面加载的Chromium动态库进行初始化:

WebView安卓最新版(图18)

由于并不是所有的系统都支持在加载动态库时,以文件内存映射的方式代替它的GNURELRO Section,因此Chromium自己提供了一个Linker。通过这个Linker加载动态库时,能够以文件内存映射的方式代替要加载的动态库的GNURELRO Section,也就是实现前面提到的函数androiddlopenext的功能。在高于Android 5.0中,由于系统已经提供了函数androiddlopenext,因此,Chromium就不会使用自己的Linker加载动态库,而是使用Android系统提供的Linker来加载动态库。通过调用System类的静态成员函数loadLipary即可以使用系统提供的Linker来加载动态库。LiparyLoader类的静态成员函数loadAlreadyLocked要加载的动态库由NativeLiparies类的静态成员变量LIpARIES指定:

WebView安卓最新版(图19)

从这里可以知道,LiparyLoader类的静态成员函数loadAlreadyLocked要加载的动态库就是Chromium动态库。这个Chromium动态库前面已经加载过了,因此这里通过调用System类的静态成员函数loadLipary再加载时,仅仅是只会触发它导出的函数JNIOnLoad被调用,而不会重新被加载。Chromium动态库导出的JNIOnLoad被调用的时候,Chromium动态库就会执行初始化工作:

WebView安卓最新版(图20)

其中的一个初始化操作是给Chromium的Content层设置一个类型为AwMainDelegate的Main Delegate。这个AwMainDelegate实现在Chromium的androidwebview模块中。Android WebView是通过Chromium的androidwebview模块加载和渲染网页的。Chromium加载和渲染网页的功能又是实现在Content层的,因此,Chromium的androidwebview模块又要通过Content层实现加载和渲染网页功能。这样,Chromium的androidwebview模块就可以设置一个Main Delegate给Content层,以便它们可以互相通信。给Chromium的Content层设置一个Main Delegate是通过调用函数SetContentMainDelegate实现的:

WebView安卓最新版(图21)

从前面的分析可以知道,参数delegate指向的是一个AwMainDelegate对象,这个AwMainDelegate对象会被函数SetContentMainDelegate保存在全局变量gcontentmain_delegate中。这一步执行完成后,Chromium动态库就在App进程中加载完毕,并且也已经完成了初始化工作。与此同时,系统也为App进程创建了一个类型为WebViewChromiumFactoryProvider的WebViewFactory。回到前面分析的WebView类的成员函数ensureProviderCreated中,这时候就它会通过调用上述类型为WebViewChromiumFactoryProvider的WebViewFactory的成员函数createWebView为当前创建的WebView创建一个WebView Provider:

WebView安卓最新版(图22)

WebViewChromiumFactoryProvider类的成员函数createWebView创建的是一个类型为WebViewChromium的WebView Provider。这个WebView Provider将会返回给WebView类的成员函数ensureProviderCreated。WebView类的成员函数ensureProviderCreated再将该WebView Provider保存在成员变量mProvider中。这样,正在创建的WebView就获得了一个类型为WebViewChromium的WebView Provider。以后通过这个WebView Provider,就可以通过Chromium来加载和渲染网页了。

更新日志

v128.0.6613.127版本

修复了一些小错误并进行了改进。安装或更新到最新版本即可查看!

WebView安卓最新版截图
WebView安卓最新版1
WebView安卓最新版2
WebView安卓最新版3
WebView安卓最新版4

游戏排行

更多 >
  • 1among us预言家模式游戏图标among us预言家模式 v2022.10.18下载之家提供among us预言家模式下载,amongus预言家模式是一款随时都能够参与进来的多人冒险小游戏,这里的挑战非常的有趣,每一次加入的玩家都会是诗人,其...,among us预言家模式免费下载地址...
  • 2校园巴士世界游戏图标校园巴士世界 v1.0下载之家提供校园巴士世界游戏下载,校园巴士世界,独特的校园生活新体验,多种玩法给你带来不同的体验感,轻松有趣的巴士上的欢乐时光,感受到不同的惊喜所在,让...,校园巴士世界免费下载地址...
  • 3瓜子盒(坦克世界插件安装管理工具)游戏图标瓜子盒(坦克世界插件安装管理工具) v7.0.3.5 官方免费版瓜子盒是针对游戏《坦克世界》制作的一款插件安装管理工具,软件中收录了各种针对《坦克世界》制作的插件。用户可以通过瓜子盒来轻松完成插件的搜索、下载和安装工作,轻松对插件进行管理。KK下载站为您提供瓜子
  • 4龙珠传奇(送LR超赛神孙悟空)游戏图标龙珠传奇(送LR超赛神孙悟空) 1.0变态手游为喜爱龙珠传奇(送LR超赛神孙悟空)手游玩家提供龙珠传奇(送LR超赛神孙悟空)变态版,龙珠传奇(送LR超赛神孙悟空)公益服,龙珠传奇(送LR超赛神孙悟空)无限元宝服下载,希望大家能够喜欢!
  • 5仙剑奇侠传梦幻版2.22游戏图标仙剑奇侠传梦幻版2.22 v2.22仙剑奇侠传梦幻版2.22是一款高度还原游戏剧情设计的仙侠手游,经典的仙侠手游的玩法设计,精彩的战斗玩法的设计,并且在这里各位小伙伴们还可以和你喜欢的逍遥哥哥一起修仙,用出色的画面征服一大批玩家,感兴趣的玩家赶紧下载试试吧。
  • 6华夏宏图最新破解版游戏图标华夏宏图最新破解版 2.0.1华夏宏图最新破解版是一款经典怀旧的三国手游,丰富精彩的剧本引人入胜玩起来很带感呢,参考了真实的历史以及地理进行改变呢,超多好玩的副本不容错过哦,十分讲究策略技巧等你来征服大家,招募武将与你一起竞技吧,感兴趣就点击下载吧。
  • 7第六大陆游戏游戏图标第六大陆游戏 第六大陆游戏第六大陆呈现一个庞大的世界观,玩家需要探索这个辽阔的世界,不断的成长。9k9k手游网为大家提供第六大陆游戏预约。
  • 8vampire survivors手机版苹果游戏图标vampire survivors手机版苹果 v1.1.103下载之家提供vampire survivors手机版苹果下载,vampiresurvivors手机版苹果ios是一款特别好玩的冒险战斗类型的游戏,玩家是可以在其中尽情的冒险一番的,...,vampire survivors手机版苹果免费下载地址...

软件排行

更多 >
  • 1cs扫描全能王免费版游戏图标cs扫描全能王免费版 v6.55.5.2312180000cs扫描全能王(免费版)CamScanner是最新版本扫描全能王2024,高级账户号,无需密钥,免费享受所有vip功能,赶快下载体验吧!扫描全能王永久免费版介绍2亿人在用的手机描仪,扫文档管理工具。能自动切除文档背景,生成高清PDF、JPEG或TXT文本。还可以邮件发
  • 2全民免费小说游戏图标全民免费小说 v1.3.01.10493全民免费小说app给大家准备了全方面的福利,让你可以随时欣赏精彩的小说内容,是一个非常优质的小说阅读软件。全民免费小说app支持多种文本格式阅读,不仅可以免费阅读在线书籍,还能支持本地小说的导入,使用方便,让您随时随地阅读各种精品书籍,带来最优质的阅读体验。
  • 3交通安全云课堂游戏图标交通安全云课堂 v7.1.3交通安全云课堂是四川神通教育科技有限公司推出的安全知识学习云课堂类型手机app,帮助驾驶员全方位掌握安全知识,进行互联网安全教育。一站式搞定职业驾驶员继续教育。
  • 42022行家外卖app游戏图标2022行家外卖app v1.1.1下载之家提供2022行家外卖app下载,2022行家外卖app最新版是一款特别好用的外卖软件,这个上面是有很多物品存在的,也是可以去购买,而且也是能够很快的为...,2022行家外卖app免费下载地址...
  • 5开言英语游戏图标开言英语 v5.7.1开言英语app是一款专业高效的英语学习平台。开言英语app拥有很多实用的课程,生活、商务、留学、旅游等方面一网打尽。开言英语中的英语教师都是非常专业的并且能够一对一监督用户们的学习,还有海量专业英语教师入驻平台用户们在学习时遇到不懂的问题也是可以在线咨询老师们。
  • 6来省钱游戏图标来省钱 v0.0.27来省钱app是由下载吧收集于官网最新发布版本,来省钱是一个便捷的省钱软件,帮助用户实现购物省钱,并轻松进行分享赚钱;该软件中汇集了各大电商平台的商品优惠券,并且包含的商品类型也丰富,潮流女装、母婴健康、美妆护肤、
  • 7搜书大师app官方版游戏图标搜书大师app官方版 v23.10 安卓最新免费版搜书大师正版是一款小说阅读软件,整合全网小说资源,让喜欢阅读的朋友们可以可以随时体验免费浏览的乐趣,小说分类明细,查找方便,有兴趣的朋友们欢迎来下载体验!搜书大师app官方版介绍搜书引擎,为你提供精准快速的网络资源搜索服务。闹书荒了?搜书大师帮你搜
  • 8Excel电子表格游戏图标Excel电子表格 v1.0.7Excel电子表格手机版是一款帮助用户快速建立和制作Excel表格软件。Excel电子表格手机版能帮助用户轻松自由的编辑Excel表格并可以使用它给力的公式计算功能。Excel电子表格手机版能计算出各种各样复杂的数学计算问题,省时省力,还能直观的查看表格数据。