热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

androidwebview内核,android4.4webviewchromium显示网页的chromium内核结构

android4.4webviewchromium是单进程的,图中所有组件都运行在Browser进程中。按从上而下的顺序介绍这张图中与显示网页相关的chromium内

171441902_1_20190920023138300

android4.4 webview chromium是单进程的,图中所有组件都运行在Browser进程中。

按从上而下的顺序介绍这张图中与显示网页相关的chromium内核结构。

1.AwContents->WebContentsImpl

AwContnents的创建过程如下图:

171441902_2_20190920023138753

AwContents是WebView接口的主要实现类。

native层的AwContents包含chromium内核browser组件中的类WebContents。

WebContents是chromium内核browser组件的入口。

我们看AwContents的java层和native层的结构。

171441902_3_20190920023138878

ContentViewCore:

java层AwContents将WebView的接口调用转接给java层ContentViewCore。native层

ContentViewCore包含Browser组件的入口WebContentsImpl。真正实现WebView功能

的是WebContentsImpl。

AwContentsClient:

AwContentsClient的实现类WebViewContentsClientAdapter包含在WebViewChromium中,

WebViewChromium利用这个类接收AwContents的回调。WebViewContentsClientAdapter

封装了应用层实现的WebViewClient和WebChromeClient.

AwContentsClientBridge:

为AwContentsClient处理js相关的jni通信。

AwWebContentsDelegate:

是AwContentsClient接口的一部分,用于接收WebContentsImpl模块的回调。

AwWebContentsDelegate将具体实现都转接给AwContentsClient。

WebContentsImpl创建过程如下:

171441902_4_20190920023139144

2.WebContentsImpl->Renderer host

171441902_5_20190920023140660

RenderWidgetHostDelegate:

对RenderWidgetHost的状态感兴趣的类都会实现这个接口。用于接收RenderWidgetHost的状态变化通知。

RenderViewHostDelegate:

对RenderViewHost的状态感兴趣的类都会实现这个接口。用于接收RenderViewHost的状态变化通知。

RenderViewHostManager负责创建和管理WebContentsImpl中用到的RenderViewHosts。

WebContentsImpl的构造函数中创建了RenderViewHostManager实例,并将自身作为RenderWidgetHostDelegate

和RenderViewHostDelegate的实例传给RenderViewHostManager。

RenderViewHostManager通过回调这两个接口通知WebContentsImpl当前RenderWidgetHost和RenderViewHost

的状态变化。

RenderViewHostImpl的创建过程如下。

171441902_6_20190920023140925

RenderViewHostImpl与RenderViewImpl是一一对应的。

3.renderer host->renderer

renderer组件中RenderViewImpl是核心模块。

下图是应用层触发的RenderViewImpl创建过程。

171441902_7_2019092002314181

4.renderer->webkit glue

RenderViewImpl结构图

171441902_8_20190920023141456

WebKit::WebView的创建过程

RenderViewImpl::Create()调用RenderViewImpl的构造函数创建

RenderViewImpl的实例,之后调用RenderViewImpl::Initialize:

RenderViewImpl::Initialize(){

webwidget_ = WebView::create(this);

}

RenderWidget的实例创建是由下来函数触发的:

RenderViewImpl::createPopupMenu(){

RenderWidget* widget =

RenderWidget::Create(routing_id_, popup_type, screen_info_);

return widget->webwidget();

}

RenderWidget::Create()只有这一个入口。

用来创建不同类型的弹出窗口。

5. webkit glue->WebKit

WebViewImpl的结构图:

171441902_9_20190920023141863



推荐阅读
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 本文详细解析了 Yii2 框架中视图和布局的各种函数,并综述了它们在实际开发中的应用场景。通过深入探讨每个函数的功能和用法,为开发者提供了全面的参考,帮助他们在项目中更高效地利用这些工具。 ... [详细]
  • V8不仅是一款著名的八缸发动机,广泛应用于道奇Charger、宾利Continental GT和BossHoss摩托车中。自2008年以来,作为Chromium项目的一部分,V8 JavaScript引擎在性能优化和技术创新方面取得了显著进展。该引擎通过先进的编译技术和高效的垃圾回收机制,显著提升了JavaScript的执行效率,为现代Web应用提供了强大的支持。持续的优化和创新使得V8在处理复杂计算和大规模数据时表现更加出色,成为众多开发者和企业的首选。 ... [详细]
  • Java环境中Selenium Chrome驱动在大规模Web应用扩展时的性能限制分析 ... [详细]
  • 将JavaScript文件嵌入HTML文档是Web开发中的基本操作。常见的方法是通过在HTML文件中使用``标签来引用外部的.js文件。这种方法不仅保持了代码的整洁性,还便于管理和维护。此外,还可以利用模块化脚本和异步加载技术进一步提升页面性能。 ... [详细]
  • 在HTML5应用中,Accordion(手风琴,又称抽屉)效果因其独特的展开和折叠样式而广泛使用。本文探讨了三种不同的Accordion交互效果,通过层次结构优化信息展示和页面布局,提升用户体验。这些效果不仅增强了视觉效果,还提高了内容的可访问性和互动性。 ... [详细]
  • TypeScript 实战分享:Google 工程师深度解析 TypeScript 开发经验与心得
    TypeScript 实战分享:Google 工程师深度解析 TypeScript 开发经验与心得 ... [详细]
  • 当前,众多初创企业对全栈工程师的需求日益增长,但市场中却存在大量所谓的“伪全栈工程师”,尤其是那些仅掌握了Node.js技能的前端开发人员。本文旨在深入探讨全栈工程师在现代技术生态中的真实角色与价值,澄清对这一角色的误解,并强调真正的全栈工程师应具备全面的技术栈和综合解决问题的能力。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 探索Web 2.0新概念:Widget
    尽管你可能尚未注意到Widget,但正如几年前对RSS的陌生一样,这一概念正逐渐走入大众视野。据美国某权威杂志预测,2007年将是Widget年。本文将详细介绍Widget的定义、功能及其未来发展趋势。 ... [详细]
  • 线程能否先以安全方式获取对象,再进行非安全发布? ... [详细]
  • 本文探讨了如何通过检测浏览器类型来动态加载特定的npm包,从而优化前端性能。具体而言,仅在用户使用Edge浏览器时加载相关包,以提升页面加载速度和整体用户体验。此外,文章还介绍了实现这一目标的技术细节和最佳实践,包括使用User-Agent字符串进行浏览器识别、条件加载策略以及性能监控方法。 ... [详细]
  • 本课程详细解析了Spring AOP的核心概念及其增强机制,涵盖前置增强、后置增强和环绕增强等类型。通过具体示例,深入探讨了如何在实际开发中有效运用这些增强技术,以提升代码的模块化和可维护性。此外,还介绍了Spring AOP在异常处理和性能监控等场景中的应用,帮助开发者更好地理解和掌握这一强大工具。 ... [详细]
  • HTML5大文件传输技术深度解析与实践分享
    本文深入探讨了HTML5在Web前端开发中实现大文件上传的技术细节与实践方法。通过实例分析,详细讲解了如何利用HTML5的相关特性高效、稳定地处理大文件传输问题,并提供了可供参考的代码示例和解决方案。此外,文章还讨论了常见的技术挑战及优化策略,旨在帮助开发者更好地理解和应用HTML5大文件上传技术。 ... [详细]
  • 本文介绍了如何利用摄像头捕捉图像,并将捕获的图像数据保存为文件。通过详细的代码示例,展示了摄像头调用的具体实现方法,适用于多种应用场景,如安全监控、图像处理等。 ... [详细]
author-avatar
贝贝不离
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有