热门标签 | 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



推荐阅读
  • 1.webkit内核中的一些私有的meta标签,这些meta标签在开发webapp时起到非常重要的作用(1) ... [详细]
  • 唱唱反调:风口上的技术不要盲目追
      对于前端领域的开发者来说,“学不动了”虽然更多是一种调侃,但也真实地反映出了他们面对频繁出新的前端技术时又爱又恨的心情。在经历了移动互联网的大爆发后,前端领域的边界不 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了移动web性能测试笔记之一相关的知识,希望对你有一定的参考价值。收集整理@2017/12/16 ... [详细]
  • webui之常用js操作(webui界面是什么)
    本文目录一览:1、web前端开发需要掌握的几个必备技术 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 本文介绍了响应式页面的概念和实现方式,包括针对不同终端制作特定页面和制作一个页面适应不同终端的显示。分析了两种实现方式的优缺点,提出了选择方案的建议。同时,对于响应式页面的需求和背景进行了讨论,解释了为什么需要响应式页面。 ... [详细]
  • JavaScript简介及语言特点
    本文介绍了JavaScript的起源和发展历程,以及其在前端验证和服务器端开发中的应用。同时,还介绍了ECMAScript标准、DOM对象和BOM对象的作用及特点。最后,对JavaScript作为解释型语言和编译型语言的区别进行了说明。 ... [详细]
  • 本文概述了JNI的原理以及常用方法。JNI提供了一种Java字节码调用C/C++的解决方案,但引用类型不能直接在Native层使用,需要进行类型转化。多维数组(包括二维数组)都是引用类型,需要使用jobjectArray类型来存取其值。此外,由于Java支持函数重载,根据函数名无法找到对应的JNI函数,因此介绍了JNI函数签名信息的解决方案。 ... [详细]
  • 本文是一篇翻译文章,介绍了async/await的用法和特点。async关键字被放置在函数前面,意味着该函数总是返回一个promise。文章还提到了可以显式返回一个promise的方法。该特性使得async/await更易于理解和使用。本文还提到了一些可能的错误,并希望读者能够指正。 ... [详细]
  • html结构 ... [详细]
  • 微信小程序:弹窗组件封装popup.wxml ... [详细]
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社区 版权所有