码迷,mamicode.com
首页 > 移动开发 > 详细

android4.4 webview chromium显示网页的chromium内核结构

时间:2014-06-10 15:39:26      阅读:421      评论:0      收藏:0      [点我收藏+]

标签:android   style   blog   java   http   ext   

bubuko.com,布布扣

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

AwContnents的创建过程如下图:

bubuko.com,布布扣

AwContents是WebView接口的主要实现类。
native层的AwContents包含chromium内核browser组件中的类WebContents。
WebContents是chromium内核browser组件的入口。
我们看AwContents的java层和native层的结构。

bubuko.com,布布扣

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创建过程如下:

bubuko.com,布布扣

2.WebContentsImpl->Renderer host

bubuko.com,布布扣

RenderWidgetHostDelegate:
对RenderWidgetHost的状态感兴趣的类都会实现这个接口。用于接收RenderWidgetHost的状态变化通知。
RenderViewHostDelegate:
对RenderViewHost的状态感兴趣的类都会实现这个接口。用于接收RenderViewHost的状态变化通知。
RenderViewHostManager负责创建和管理WebContentsImpl中用到的RenderViewHosts。
WebContentsImpl的构造函数中创建了RenderViewHostManager实例,并将自身作为RenderWidgetHostDelegate
和RenderViewHostDelegate的实例传给RenderViewHostManager。
RenderViewHostManager通过回调这两个接口通知WebContentsImpl当前RenderWidgetHost和RenderViewHost
的状态变化。
RenderViewHostImpl的创建过程如下。

bubuko.com,布布扣

RenderViewHostImpl与RenderViewImpl是一一对应的。

3.renderer host->renderer

renderer组件中RenderViewImpl是核心模块。
下图是应用层触发的RenderViewImpl创建过程。

bubuko.com,布布扣

4.renderer->webkit glue

RenderViewImpl结构图

bubuko.com,布布扣

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的结构图:

bubuko.com,布布扣

android4.4 webview chromium显示网页的chromium内核结构,布布扣,bubuko.com

android4.4 webview chromium显示网页的chromium内核结构

标签:android   style   blog   java   http   ext   

原文地址:http://blog.csdn.net/jaylinzhou/article/details/29368671

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!