Android WebViewWebkit内核深入讲解.docx

上传人:b****6 文档编号:3232276 上传时间:2022-11-20 格式:DOCX 页数:16 大小:923.59KB
下载 相关 举报
Android WebViewWebkit内核深入讲解.docx_第1页
第1页 / 共16页
Android WebViewWebkit内核深入讲解.docx_第2页
第2页 / 共16页
Android WebViewWebkit内核深入讲解.docx_第3页
第3页 / 共16页
Android WebViewWebkit内核深入讲解.docx_第4页
第4页 / 共16页
Android WebViewWebkit内核深入讲解.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

Android WebViewWebkit内核深入讲解.docx

《Android WebViewWebkit内核深入讲解.docx》由会员分享,可在线阅读,更多相关《Android WebViewWebkit内核深入讲解.docx(16页珍藏版)》请在冰豆网上搜索。

Android WebViewWebkit内核深入讲解.docx

AndroidWebViewWebkit内核深入讲解

一、WebKit简介

WebKit是一个开源的浏览器网页排版引擎,包含WebCore排版引擎和JSCore引擎。

WebCore和JSCore引擎来自于KDE项目的KHTML和KJS开源项目。

Android平台的Web引擎框架采用了WebKit项目中的WebCore和JSCore部分,上层由Java语言封装,并且作为API提供给Android应用开发者,而底层使用WebKit核心库(WebCore和JSCore)进行网页排版。

二、WebKit目录结构

Android平台的WebKit模块分成Java和WebKit库两个部分,其目录结构如下表所示:

WebKit模块目录结构

Java层(根目录device\java\android\android\webkit)

BrowserFrame.java

BrowserFrame对象是对WebCore库中的Frame对象的Java层封装,用于创建WebCore中定义的Frame,以及为该Frame对象提供Java层回调方法。

ByteArrayBuilder.java

ByteArrayBuilder辅助对象,用于byte块链表的处理。

CachLoader.java

URLCache载入器对象,该对象实现StreadLoader抽象基类,用于通过CacheResult对象载入内容数据。

CacheManager.java

Cache管理对象,负责Java层Cache对象管理

CacheSyncManager.java

Cache同步管理对象,负责同步RAM和FLASH之间的浏览器Cache数据。

实际的物理数据操作在WebSyncManager对象中完成。

CallbackProxy.java

该对象是用于处理WebCore与UI线程消息的代理类。

当有Web事件产生时WebCore线程会调用该回调代理类,代理类会通过消息的方式通知UI线程,并且调用设置的客户对象的回调函数。

CellList.java

CellList定义图片集合中的Cell,管理Cell图片的绘制、状态改变以及索引。

CookieManager.java

根据RFC2109规范,管理cookies

CookieSyncManager.java

Cookies同步管理对象,该对象负责同步RAM和Flash之间的Cookies数据。

实际的物理数据操作在基类WebSyncManager中完成。

DataLoader.java

数据载入器对象,用于载入网页数据。

DateSorter.java

尚未使用

DownloadListener.java

下载侦听器接口

DownloadManagerCore.java

下载管理器对象,管理下载列表。

该对象运行在WebKit的线程中,通过CallbackProxy对象与UI线程交互。

FileLoader.java

文件载入器,将文件数据载入到Frame中。

FrameLoader.java

Frame载入器,用于载入网页Frame数据

HttpAuthHandler.java

Http认证处理对象,该对象会作为参数传递给BrowserCallback.displayHttpAuthDialog方法,与用户交互。

HttpDataTime.java

该对象是处理HTTP日期的辅助对象。

JsConfirmResult.java

Js确认请求对象

JsPromptResult.java

Js结果提示对象,用于向用户提示Javascript运行结果。

JsResult.java

Js结果对象,用于用户交互

JWebCoreJavaBridge.java

用Java与WebCore库中Timer和Cookies对象交互的桥接代码。

LoadListener.java

载入器侦听器,用于处理载入器侦听消息。

Network.java

该对象封装网络连接逻辑,为调用者提供更为高级的网络连接接口。

PanZoom.java

用于处理图片缩放、移动等操作

PanZoomCellList.java

用于保存移动、缩放图片的Cell

PerfChecker.java

用于效率测试的功能对象?

SslErrorHandler.java

用于处理SSL错误消息。

StreamLoader.java

StreamLoader抽象类是所有内容载入器对象的基类。

该类是通过消息方式控制的状态机,用于将数据载入到Frame中。

TextDialog.java

用于处理html中文本区域叠加情况,可以使用标准的文本编辑而定义的特殊EditText控件。

URLUtil.java

URL处理功能函数,用于编码、解码URL字符串,以及提供附加的URL类型分析功能。

WebBackForwardList.java

该对象包含WebView对象中显示的历史数据。

WebBackForwardListClient.java

浏览历史处理的客户接口类,所有需要接收浏览历史改变的类都需要实现该接口。

WebChromeClient.java

Chrome客户基类,Chrome客户对象在浏览器文档标题、进度条、图标改变时候会得到通知。

WebHistoryItem.java

该对象用于保存一条网页历史数据

WebIconDataBase.java

图表数据库管理对象,所有的WebView均请求相同的图标数据库对象。

WebSettings.java

WebView的管理设置数据,该对象数据是通过JNI接口从底层获取。

WebSyncManager.java

数据同步对象,用于RAM数据和FLASH数据的同步操作。

WebView.java

Web视图对象,用于基本的网页数据载入、显示等UI操作。

WebViewClient.java

Web视图客户对象,在Web视图中有事件产生时,该对象可以获得通知。

WebViewCore.java

该对象对WebCore库进行了封装,将UI线程中的数据请求发送给WebCore处理,并且通过CallbackProxy的方式,通过消息通知UI线程数据处理的结果。

WebViewDatabase.java

该对象使用SQLiteDatabase为WebCore模块提供数据存取操作。

三、WebKit模块框架

Android平台的WebKit模块由Java层和WebKit库两个部分组成,Java层负责与Android应用程序进行通信,而WebKit类库负责实际的网页排版处理。

Java层和C层库之间通过JNI和Bridge相互调用,如下图所示:

3.1Java层框架

3.1.1 主要类关系

WebKit模块的Java层一共由41个文件组成,其中主要的类关系如下图所示:

1.WebView

WebView类是WebKit模块Java层的视图类,所有需要使用Web浏览功能的Android应用程序都要创建该视图对象显示和处理请求的网络资源。

目前,WebKit模块支持HTTP、HTTPS、FTP以及javascript请求。

WebView作为应用程序的UI接口,为用户提供了一系列的网页浏览、用户交互接口,客户程序通过这些接口访问WebKit核心代码。

1.WebViewDatabase

WebViewDatabase是WebKit模块中针对SQLiteDatabase对象的封装,用于存储和获取运行时浏览器保存的缓冲数据、历史访问数据、浏览器配置数据等。

该对象是一个单实例对象,通过getInstance方法获取WebViewDatabase的实例。

WebViewDatabase是WebKit模块中的内部对象,仅供WebKit框架内部使用。

1.WebViewCore

WebViewCore类是Java层与C层WebKit核心库的交互类,客户程序调用WebView的网页浏览相关操作会转发给BrowserFrame对象。

当WebKit核心库完成实际的数据分析和处理后会回调WebViweCore中定义的一系列JNI接口,这些接口会通过CallbackProxy将相关事件通知相应的UI对象。

1.CallbackProxy

CallbackProxy是一个代理类,用于UI线程和WebCore线程交互。

该类定义了一系列与用户相关的通知方法,当WebCore完成相应的数据处理,则会调用CallbackProxy类中对应的方法,这些方法通过消息方式间接调用相应处理对象的处理方法。

详细的处理流程在下文中会具体分析。

1.BrowserFrame

BrowserFrame类负责URL资源的载入、访问历史的维护、数据缓存等操作,该类会通过JNI接口直接与WebKitC层库交互。

1.JWebCoreJavaBridge

该类为Java层WebKit代码提供与C层WebKit核心部分的Timer和Cookies操作相关的方法。

1.DownloadManagerCore

下载管理核心类,该类负责管理网络资源下载,所有的Web下载操作均有该类同一管理。

该类实例运行在WebKit线程当中,与UI线程的交互是通过调用CallbackProxy对象中相应的方法完成。

1.WebSettings

该对象描述了WEB浏览器访问相关的用户配置信息。

1.DownloadListener

下载侦听接口,如果客户代码实现该接口,则在下载开始、失败、挂起、完成等情况下,DownloadManagerCore对象会调用客户代码中实现的DwonloadListener方法。

1.WebBackForwardList

WebBackForwarList对象维护着用户访问历史记录,该类为客户程序提供操作访问浏览器历史数据的相关方法。

1.WebViewClient

WebViewClient类定义了一系列事件方法,如果Android应用程序设置了WebViewClient派生对象,则在页面载入、资源载入、页面访问错误等情况发生时,该派生对象的相应方法会被调用。

1.WebBackForwardListClient

WebBackForwardListClient对象定义了对访问历史操作时可能产生的事件接口,当用户实现了该接口,则在操作访问历史时(访问历史移除、访问历史清空等)用户会得到通知。

1.WebChromeClient

WebChromeClient类定义了与浏览窗口修饰相关的事件。

例如接收到Title、接收到Icon、进度变化时,WebChromeClient的相应方法会被调用。

3.1.2 主要类的设计

3.1.2.1 数据载入器的设计

WebKit模块的Java部分框架中使用数据载入器来加载相应类型的数据,目前有CacheLoader、DataLoader以及FileLoader三类载入器,他们分别用于处理缓存数据、内存据,以及文件数据的载入操作。

Java层(WebKit模块)所有的载入器都从StreamLoader继承(其父类为Handler),由于StreamLoader类的基类为Handler类,因此在构造载入器时,会开启一个事件处理线程,该线程负责实际的数据载入操作,而请求线程通过消息的方式驱动数据的载入。

下图是数据载入器相关类的类图结构:

StreamLoader类定义了4个不同的消息(MSG_STATUS、MSG_HEADERS、MSG_DATA、MSG_END),分别表示发送状态消息、发送消息头消息、发送数据消息以及数据发送完毕消息。

该类提供了2个抽象保护方法以及一个共有方法:

setupStreamAndSendStatus保护方法主要是用于构造与通信协议相关的数据流

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 城乡园林规划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1