blink渲染知识9-chromium webview硬件渲染的演进

4.4的硬件渲染关键点:独立线程使用gpu rasterrize,并且ui线程合成时,也是在gpu上操作数据。

http://blog.youkuaiyun.com/hongbomin/article/details/40896313

原创文章,转载请以链接形式注明原始出处为http://blog.youkuaiyun.com/hongbomin/article/details/40896313

摘要:从AndroidKitKat系统第一个采用Chromium内核的WebView开始,AndroidWebView一直在持续演进中,自ChromiumM38开始,WebView在硬件渲染模式方面发生了较大的变化,最明显的变化莫过于WebGL的支持以及ubercompositor的使用,同时为了吻合AndroidL的渲染模型变化,DrawGL函数是在Android系统的渲染线程中执行的。

Android4.4系统WebView的硬件渲染

对于ChromiumWebView来说,首先它是单进程模型的,至少在使用CommandBuffer时可以省去不必要的跨进程IPC开销,尽管IPC开销并没有想象中那么大(根据性能评测,大概占了不超过5%的开销)。更为重要的是,WebView必须是Android窗口中一个普通的View,与窗口其他View共享同一个AndroidSurface绘制表面,因此,

  • WebView在UI线程上响应onDraw事件,启动页面渲染的流水线工作,将新的帧内容通过onDraw绘制到Canvas上;

  • WebView使用同步合成器(SynchronousCompositor)来合成页面内容,“同步”指的是运行在UI线程上,合成操作是由UI线程的onDraw事件触发的,而不是VSYNC触发的。从线程化合成器的角度看,UI线程实际上也是Compositing线程;

  • WebView提供了一个硬件加速版本的回调函数DrawGL(即AwContents::DrawGL),将Chromium的渲染流水线工作串到AndroidView的渲染路径上。在使用硬件加速的情况下,WebView.onDraw接受的参数Canvas是一个对AndroidSDK不可见的android.view.HardwareCanvas对象,HardwareCanvas允许客户端提供自己的GL回调函数,Android View系统在重放(playback)显示列表绘制View层次时会调用这个回调函数。(注:在AndroidFramework内部实现中,当开始绘制HardwareCanvas时,当前GL上下文会绑定HardwareCanvas的framebuffer对象,所以GL回调函数中所有的GL命令实际上在操作HardwareCanvas的framebuffer对象)。

Android4.4系统中,在绘制View层次时,显示列表的更新记录以及重放都发生在UI线程上,相应地,WebView.onDraw事件的处理中,页面的层合成,以及通过DrawGL函数将合成的内容绘制到HardwareCanvas,都是在UI线程执行的。当WebView收到invalidate消息后,ViewRoot会遍历整个View树决定向哪些View派送onDraw事件,WebView响应onDraw事件时,会直接请求HardwareCanvas执行DrawGL回调函数,DrawGL再请求同步合成器以硬件加速方式合成新的一帧内容,并将这个新的内容通过GL命令绘制到HardwareCanvas上。这里没有特别提到Blink线程,原因是Blink线程相对来说还是比较独立的,在Blink线程启动后,会逐步执行DOM解析和排版,JS代码的执行,以及渲染层的状态信息计算等工作,这些工作运行完毕之后,如果Compositor内部状态机发现页面还需要继续更新内容,执行动画,Blink线程会通知UI线程(即Compositing线程)将WebView置为失效(invalidate)状态,继而触发onDraw事件,再把上述过程走一遍。具体过程可参考如下图示:



关键点:独立raster线程,使用gpuraster.

ui线程负责合成raster的结果。不支持webgl.

必要的解释:

  • Blink线程启用了Impl-Side-Painting方式,在绘制页面内容时,先将绘制命令录制到一个SkPicture中,稍后再在Raster线程中重放这些绘制命令,从而尽可能的降低Blink线程的负载;

  • Raster线程是通过zero-copy技术直接将rasterization绘制到GPU内存中,从而减少了一次CPU到GPU的数据拷贝开销;

  • 整个渲染过程中只有一个Compositor,在UI线程将已更新的Web页面内容执行合成操作,写到HardwareCanvas后端的FBO中,然后由AndroidSurfaceFlinger将最后的UI呈现在屏幕上

  • 步骤1,2,6和步骤3,4,5是可以同时进行的,步骤3,4,5总是在准备下一帧内容

    1,2,6是onDraw在ui线程触发的逻辑,要返回一份合成的canvas数据。

    3,4,5是要执行绘制layer,以及raster的paint操作,准备下一frame的内容。当然最开始也应该是由onDraw触发的,但是可能是onDraw发送的一个request.

这里还需要特别说明的是,Android4.4系统中WebView是没有单独的GPU线程执行GL命令的,所有的一切都发生在UI线程上,导致很难再提供WebGL的支持了,就算是花些力气支持了WebGL,估计也是吃力不讨好,因为性能是个大问题,在UI线程上执行WebGL很可能导致UI根本不会有响应。



关键点:raster线程,在gpu上rasterskpicture.

ui线程使用gpu上的raster的结果合成。

AndroidL系统WebView的改进

Chromium WebView的演进速度还是相当的快。从最新发布的AndroidL开发者预览版来看,在页面渲染的流水线和线程模型都有不少改进,如下图所示:



关键点:独立raster线程使用gpuraster.

独立gpu线程执行gl命令,支持webgl,

ui线程将gpu线程产生的webgltexture和raster线程产生的texture合成,将结果交给系统的render线程的parentcompositor合成。

Ui线程的compositor成了childcompositor.



ubercompositor的使用

简单的来说,ubercompositor是一个大一统的合成器,不管Chromium系统中存在几个合成器,但最终的合成总是由一个称为ParentCompositor完成,其他的Compositor唯一要做的事情是将自己管理的GPU资源打包为CompositorFrame发送给ParentCompositor,由ParentCompositor根据CompositorFrame包含的RenderPass列表和元数据等,执行合成操作将最后的内容写到Native窗口上,当Parent Compositor完成合成操作,它会通知Childcompositor可以执行资源的清理工作了,如下图所示:



为了吻合AndroidL引入的渲染线程(注:为了和Android系统的渲染线程作区分,Chromium的渲染线程称为Blink线程),将Chromium渲染流程无缝整合到AndroidL系统中,WebView新的架构中引入了两级合成器:

  • ChildCompositor:页面内容的合成器,就是前面提到的同步合成器,运行在UI线程上,是一个线程化的合成器,其中Blink线程负责生成渲染层的状态信息,而UI线程负责合成渲染层。每收到onDraw事件后,WebView会使用ChildCompositor合成新的一帧,并将内容打包到CompositorFrame结构体中,稍后Android渲染线程会访问这个结构体。ChildCompositor由android_webview::BrowserViewRenderer创建;

  • Parent Compositor:类似于Chrome onAndroid中Browser进程端的合成器,是一个单线程版本的合成器,其作用是在Android系统的渲染线程,注意不是UI线程,通过DrawGL回调函数将已经由ChildCompositor合成好的CompositorFrame绘制到HardwareCanvas上。ParentCompositor由android_webview::HardwareRender创建;

与Android4.4系统不同的是,在AndroidL系统上WebView处理onDraw事件逻辑上可以分解为两个步骤:

  • 第一步,在UI线程上调用ChildCompositor合成操作生成新的CompositorFrame,再向Android系统请求执行DrawGL回调函数,但此时DrawGL并不会立即执行。UI线程负责为发生invalidate操作的View生成显示列表,再将这个显示列表同步给渲染线程上的ThreadedRenderer渲染器(我觉的这句话讲的是android系统对一般的view的处理逻辑,对于我们webview可能不是这样的);

  • 第二步,AndroidView系统在渲染线程上将显示列表提交给GPU驱动,绘制View层次的内容,在绘制显示列表的过程中,DrawGL函数将会被调用(是不是意味着我们webview没有给系统我们自己的显示列表?我们只是借用了这个调用时机,完成了类似处理显示列表的逻辑),在渲染线程上请求ParentCompositor将合成的页面内容绘制到HardwareCanvas上。

注:关于DrawGL回调函数是如何分派到Android渲染线程上执行的,由于AndroidL的源代码尚未完全公开,还不能100%确定上述描述是否完全正确。从已有掌握的信息分析来看,UI线程会向HardwareCanvas发起DrawGL调用请求,此时可能不会立即执行DrawGL,而是作为drawOp先保存在HardwareCanvas中,当渲染线程开始重放HardwareCanvas显示列表时,再调用DrawGL。

上述两个步骤与AndroidL采用的渲染线程模型完全吻合,这也是要引入两级合成器的原因。AwContents::DrawGL是将Chromium图形系统整合到Android中的一个极其关键的方法,它是AndroidL渲染线程进入Chromium图形系统的唯一入口,DrawGL是在AndroidL在渲染线程为HardwareCanvas对象重放显示列表被调用的,而另一方面,Chromium只能被动地由渲染线程调用DrawGL操作,唯一能够获取的信息是当前HardwareCanvas后端的FBO对象,然后所有的内容都绘制到这个Canvas上,其他信息诸如消息队列,异步执行任务的能力,都难以获取,这就导致Chromium会在DrawGL中,只能一次性地将任务队列中所有的任务,例如等待SyncPoint,刷新CommandBuffer等,全部执行完毕,这也就是为什么下面提到的WebGL要在一个专门的GPU线程中执行的原因。

此外,WebView这个新型的渲染模型与Android4.4系统是不兼容的,也就是从AndroidL编译出来的libwebviewchromium.so是不能够在Android4.4系统运行的。

WebGL和硬件加速Canvas2D的支持

以WebGL为例,WebView为渲染WebGL还创建了专门的GPU线程,WebGL程序中所有的GL命令都发生在这个线程上。渲染WebGL的egl上下文就是这个线程上创建的,然而,这个egl上下文是一个独立的上下文,不与WebView进程内任何其他上下文共享资源,即与AndroidView系统的上下文不在同一个sharegroup。关于Chromium中上下文和sharegroup相关技术细节,可参阅ChromiumGraphics:3D上下文及其虚拟化一文。AndroidView系统的上下文指的是调用DrawGL绘制HardwareCanvas时的上下文,因此,要将WebGL的内容绘制到HardwareCanvas上,需要解决将WebGL上下文和AndroidView系统上下文之间的texture共享和同步问题。首先,这两个上下文都属于同一进程,因此可以利用EGLImage进行跨线程的texture共享,再次,Chromium图形栈提供的信箱texture(mailboxtexture)机制有助于解决texture共享。Mailboxtexture机制为每个生成的texture生成一个64字节的唯一名字,并建立名字到textureid的全局映射表,所以不管在哪个上下文创建的texture,都可以通过mailbox的名字检索到对应的textureid,mailbox机制的好处就是在一个支持多上下文的环境提供了textureid的全局别名系统,换句话说,有了这个别名系统,所有上下文看起来都属于“同一个share group”。

那么,渲染WebGL是如何使用EGLImage和mailboxtexture机制实现资源共享的呢?

Chromium中WebGL的内容是通过离屏的framebuffer对象渲染到texture中的,在GPU线程的WebGL上下文创建这个texture时将其绑定一个唯一的mailbox名字,还会调用eglCreateImageKHR为这个textureid创建一个可以被其他上下文共享的EGLImage,当AndroidView系统的渲染线程在另一个上下文中执行DrawGL函数,通过mailbox名字可确定GPU线程中的EGLImage,将其绑定到该上下文的一个texture便可以直接使用WebGL上下文的texture了,至此解决了texture共享问题。这里还有一个问题需要交代一下,在多个上下文中共享texture时,必须处理好生产者和消费者之间的同步问题,即执行DrawGL函数绘制新的一帧时,要确保WebGL上下文的所有GL命令都已经执行完毕。Chromium同样提供了一套同步点(syncpoint)机制,来保证多个上下文(Chromium里也称CommandBuffer)之间GL命令的执行次序,在上下文A中插入一个同步点,然后在上下文B中等待这个同步点,可以保证上下文B中的GL命令必须等待上下文同步点A之前所有的GL命令全部执行完毕之后,才能开始执行。

所以,当WebGL将新的一帧内容生成完毕后,会插入一个同步点,而DrawGL时AndroidView系统上下文会等待这个同步点,只有当前WebGL所有GL命令都提交给GPU驱动之后,才开始使用WebGL的内容,从而保证了WebGL内容和DrawGL的同步。关于同步点机制的细节,请参阅ChromiumGraphics:GPU客户端之间同步机制的原理和实现分析一文。

AndroidWebView Shell也支持硬件渲染模式

WebViewShell构建在核心类AwContents之上,AwContents在功能基本上可以等同于android.webkit.WebView类。ChromiumM30的代码库中只能编译出仅支持软件渲染模式的WebViewShell,从ChromiumM38开始,WebViewShell也支持硬件加速渲染了,主要改进的地方是,使用GLSurfaceView作为最后的渲染目的地,如上所述,DrawGL回调函数可以在非UI线程上调用,而GLSurfaceView正好也内建性地支持在单独的线程中被渲染。

小结

最后,来总结一下AndroidL系统WebView的几个重要特点:

  • 第一,使用的in-process模式的命令行缓冲区,与Chromium浏览器不同的是,它没有IPC开销;

  • 第二,Parent合成器的DrawGL函数是AndroidRender线程进入Chromium系统的唯一入口,它在AndroidRender线程中被调用;

  • 第三,WebGL和硬件加速的Canvas2D运行在单独的GPU线程中,并使用EGLImage实现GPU线程和AndroidRender线程之间的GPU资源共享;

  • 第四,UI线程仍然有许多事情要做,包括Child合成器”合成“页面内容打包成CompositorFrame结构体,处理用户输入事件等;

  • 第五,UI线程和AndroidRender线程需要一定的机制去同步两者对CompositorFrame结构体的访问;

  • 第六,WebViewShell已经可以支持硬件加速模式了



相关推荐

Playwright与Puppeteer在2026年的工程分野:从协议层到信创落地

自动化测试与网页抓取的核心已从‘能否执行’转向‘能否长期稳定、合规、低维护交付’。Playwright代表面向生产环境的跨端自动化操作系统,其协议抽象层、MCP多上下文协议栈和信创原生支持,解决了Chrome 128+强化的Strict-Origin-Policy、WebGPU反自动化检测及国产OS(如统信UOS、麒麟V10)深度定制等关键挑战;而Puppeteer作为CDP直译器,在协议漂移、内存泄漏、ABI兼容性等方面日益暴露工程短板。尤其在金融、政务等强监管场景中,playwright信创、playw

weixin_30596023的博客 422

WebView-> Chromium-> WebKit (Android,浏览器内核),demo

浏览器内核:1.Webkit内核;2.Chrominum内核;3.Blink内核。 第三方可靠的WebView组件的两套解决方案:Crosswalk与TBS(X5内核)服务。    WebView加载H5也有两种模式,一种是加载服务器的H5页面,一种是加载本地的H5页面。    在4.4版本之前,Android WebView基于WebKit内核的实现,Webkit内部包含了网络请求、页面渲染、...

ShareUs的专栏 9388

Chrome为何是Web开发者的“第三只手”?深度解析DevTools工程价值

Chrome不仅是浏览器,更是Web标准落地的参考实现与开发者核心运行时环境。其Blink+V8引擎直接映射W3C/WHATWG规范演进,使开发者能提前验证CSS容器查询、WebGPU等新特性;DevTools则超越基础调试,提供覆盖网络请求溯源、布局偏移归因、代码执行热力图(Coverage)、DOM变更断点等多维穿透式诊断能力。这种‘标准-工具-工程’三位一体的设计,让Chrome成为解决白屏、接口失败、CLS抖动、内存泄漏等真实项目问题的最小可验证单元,支撑从本地开发到线上监控的全链路实践。

diedangxiang4092的博客 513

electron开发跨多平台Mac、Windows 和 Linux的桌面应用之webview标签和shell模块(四)

参考文档:https://electronjs.org/docs/api/webview-tag. 1. 在一些旧的eletron版本的中需要在主进程中引入webviewTag=true属性,才会显示webview标签。 win = new BrowserWindow({ width: 800, height: 600, webPreferences: { ...

斗师——Ace 1097

WebView中实现下载DownloadManager

WebView中实现下载WebView本身是没有下载的,那如果要实现下载怎么办。WebView有个接口,一旦loadUrl发现无法render,一般是下载url, 通过setDownloadListener可以自己处理下载任务。 public void setDownloadListener (DownloadListener listener) Registers the interface

xuchun37的专栏 2814

【电击防护篇】电击防护技术详解:从人体效应到接地系统全解析

本文系统讲解了电击防护的关键知识,包括电流对人体的影响(如30mA是心室颤动阈值)、人体电阻特性(700Ω-6100Ω)以及电气接触防护措施。重点分析了TT、TN和IT三大接地系统的结构特点与应用场景,强调TN-S系统最安全,IT系统供电连续性最佳。详细介绍了漏电保护器(RCD)的工作原理与选型指南,建议人身防护选用30mA高灵敏度RCD。文章通过对比表总结三大系统的安全性、成本及适用场景,为电气安全设计提供实用参考。

2301_81299416的博客 1748

Android Webview 漏洞复现

Andoid Webview 漏洞复现前言触发条件漏洞原理漏洞复现1. 运行环境2.1 webview介绍2.2 漏洞核心代码2.3 JS攻击核心代码2.4 效果展示 前言 Android API level 16以及之前的版本存在远程代码执行安全漏洞。该漏洞源于程序没有正确限制使用WebView.addJavascriptInterface方法,远程攻击者可通过使用Java Reflection API利用该漏洞执行任意Java对象的方法。 总结起来说,就是通过addJavascriptInterface

比格沃斯的博客 1306

基于大模型的急性重症胰腺炎全流程预测与诊疗方案研究

本研究构建了基于大模型的急性重症胰腺炎(SAP)全流程预测与诊疗系统,实现了从术前风险评估到术后康复管理的精准诊疗闭环。通过整合临床信息、实验室检查和影像学等多源数据,模型在测试集上预测准确率达X%,AUC为X,显著优于传统评分系统。研究创新性地将预测结果应用于手术方案制定、麻醉决策、并发症防控及个性化护理,形成智能化诊疗方案。验证结果显示模型具有良好的稳定性和临床适用性,同时配套的健康教育体系提升了患者自我管理能力。尽管存在样本局限性和模型可解释性等不足,该研究为SAP的精准诊疗提供了新范式,未来可通过扩

嵌入式毕设/课设资料清单(速查手册·文档模板·题库,持续更新)→ 见最新文章 1116

Android 10 WebView 踩坑实录

项目要求支持 8K 高清视频(H265编码)播放,拿到板子后却发现使用 App 可以播放 8K 高清视频,但使用浏览器却不行,即使安装上最新的 Chrome for Android 也不行。根据以往的浏览器内核开发经验,在 Android 平台上,Chromium WebView 最终是调用系统框架层的 MediaPlayer 进行播放。理论上只要系统框架层能够支持 8K 高清播放,那么浏览器应该...

云水木石 4838

人脸情绪识别(使用深度学习和OpenCV)

基于opencv与深度学习的人脸情绪识别系统

mx0390304的博客 8251

STM32 Boot程序实战:从启动流程到安全跳转机制解析

本文深入解析STM32 Boot程序的核心作用与安全跳转机制,涵盖启动流程、内存管理、中断向量表重定向及固件验证等关键环节。通过实战案例分享如何实现可靠的固件升级与故障回退策略,避免设备变砖风险,提升嵌入式系统稳定性。

pluto的博客 780

android webview内核,webview内核

x5内核原生webview内核版本统一Blink内核(基于chromium)4.4以下WebKit,4.4以上chromiumsdk体积大不占用js拦截全部方式(待测试)全部方式浏览增强支持office 、音视频无功能扩展有(上传下载)无效能极速,省流低效兼容较好无兼容问题HTML5能力webGL, canvas优化无内核共享多app共用1内核无此机制弹窗广告有无一、webView绘制相关imag...

weixin_42234168的博客 1498

别再对着数据手册画图了!用HFSS 2023 R2快速复现ESP-01的PCB天线(附模型文件)

本文详细介绍了使用HFSS 2023 R2逆向复现ESP-01 PCB天线的五个关键步骤,包括逆向工程准备、高效建模技巧、材料与边界设置、激励与求解配置以及结果分析与设计验证。通过参数化建模和智能边界检测,大幅提升仿真效率,适用于WIFI和蓝牙设备的射频设计优化。

weixin_30832143的博客 77

HarmonyOS7更新亮点实录9:ArkWeb 深度实践,Chromium 144 内核引擎进阶与网页安全沙箱配

HarmonyOS7更新亮点实录9:ArkWeb 深度实践,Chromium 144 内核引擎进阶与网页安全沙箱配置

轻口味的专栏 1万+

四阶龙格库塔方法求解一次常微分方程组

四阶龙格库塔方法求解一次常微分方程组一、写在前面二、四阶龙格库塔方法三、使用四阶龙格库塔方法求解一次常微分方程组 一、写在前面 龙格库塔方法是数值求解常微分非线性方程的有利工具,计算精度较高,通过缩短步进距离和增加阶数可以进一步控制误差范围。工程上较为常用的是四阶龙格库塔算法(R-K4),在计算收敛的情况下往往可以得到比较好的结果。 二、四阶龙格库塔方法 这里简单介绍一下算法的具体实现过程,不做详细的推导。其求解的问题是形如方程: y˙=f(y,t),其中t∈[t0,t1]初值y(t0)=c0 \dot{y

HelloWorldTM的博客 2万+

【TC3xx芯片】TC3xx芯片STM介绍

TC3xx芯片STM介绍

qq_36056498的博客 2281

每天都在用的浏览器,你知道它是如何工作的吗?

导语:本文从市面主流的浏览器及相应的内核引擎开始,介绍了Chromium为代表的浏览器架构及Blink内核的功能架构。Chromium为多进程架构,用户从启动运行浏览器后...

easylife206的专栏 809

关于在线excel插件Univer笔记教程

univer在线excel插件确实是够强大,但也存在不少bug,用户用起来是真的很爽,和本地的wps差不多,但真正的开发起来是真的费劲。由于文档提供的信息不足,我们很多功能只能去看他们插件里的源代码,然后一点点测试,一点点尝试研究。此文章可省去五天的研究成本

guiplan 5827

hashset实现原理_深入细品浏览器原理「流程图」

作者:龙付成 腾讯技术工程转发链接:https://mp.weixin.qq.com/s/QqpPGWf3IVEDN1t80CZ06Q导语:本文从市面主流的浏览器及相应的内核引擎开始,介绍了Chromium为代表的浏览器架构及Blink内核的功能架构。Chromium为多进程架构,用户从启动运行浏览器后,先后经过页面导航、渲染、资源加载、样式计算、布局、绘制、合成到一个化,最后完成GPU展示。而页...

weixin_39611930的博客 414

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

深入理解浏览器原理

导语:本文从市面主流的浏览器及相应的内核引擎开始,介绍了Chromium为代表的浏览器架构及Blink内核的功能架构。Chromium为多进程架构,用户从启动运行浏览器后...

腾讯技术工程 673

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Monica:本地运行的AI网页交互层,重塑人机协作范式

AI浏览器并非简单集成聊天框的插件,而是以网页DOM为原生上下文、以本地轻量模型为推理核心的新型Web交互范式。其技术本质是将传统‘复制-粘贴-提问’流程升级为‘所见即所解’的实时语义操作系统,依赖DOM结构化理解、低延迟本地推理与渲染一致性保障。相比云端API调用方案,它在隐私保护、上下文完整性与交互节奏上实现质的突破,适用于技术文档解析、竞品分析、企业知识处理等强上下文依赖场景。Monica作为典型代表,印证了‘AI Web Agent’正从概念走向可部署、可校准、可编程的工程现实。

350

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

app中的webview是什么?如何理解?

app中的webview是什么?如何理解? 当你上网阅读东西时,我们一般会选择一款浏览器,比如Chrome、火狐、safari、IE或者Edge。你可能不知道这些浏览器之间有一些竞争,而竞争的主要形式就是WebView。 WebView的定义 什么是WebView呢?它是本地应用程序内嵌的一个浏览器!这句话有两处需要搞清楚! 本地应用程序一般会采用诸如C++、Java、OC等语言配合它们各自的UI框架去开发,一般情况下,是不能跨平台的,比如ios和android就需要同时开发两个版本,pc和手机

Min13的博客 1万+

Android9.0 升级webview方法-仅备忘

1.下载对应需要的webview内核 https://www.apkmirror.com/apk/google-inc/android-system-webview/ 优先下载稳定版。 beta版本还是算了。2021.3.29本人委托同事翻墙下载的版本为89.0.4389.90。看新闻说优化了不少东西。不知道有没有bug先用上。 2.替换源码下面的webview.apk。 方法是搜索find . -name webview.apk. 定位到external\chromium-webview\prebui

glunoy的专栏 1万+

blink渲染知识7-webview和android的交互

http://blog.youkuaiyun.com/hongbomin/article/details/18499295 WebView本身是一个layout, 他和android的view系统交互的方法是: 当webview本身内容有变化时,需要更新到android系统时,WebView的invalidate函数被调用,实际的调用栈: BrowserViewRenderer.cc中 ->clien

732

[Android API 学习]WebView基本使用

  WebView是android.webkit包下的一个组件,能用来显示网页。 WebView默认是不带地址栏和加载进度条的,单单是一个显示页面内容的面板。 使用WebView非常简单,主要是通过load方法进行加载。 [使用WebView打开一个网页] 1.在布局xml文件中定义WebView组件 ...

162
上一篇: blink渲染知识8 - 软渲染
下一篇: blink渲染知识10 - render tree的构建点
csshell2002
博客等级 码龄11年 30粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值