- 浏览: 43483 次
- 来自: ...
最近访客 更多访客>>
最新评论
-
无愧衾影:
这样解决的啊,GOOD,想出来这个方法真不错。。。。。。
Android 如何在界面上只显示控件(ViewGroup)的一部分。 -
huangshenji:
Config.groovy
Grails 的简单应用
如需转载,请注明出处!
WebSite: http://www.jjos.org/
作者: 姜江 linuxemacs@gmail.com
QQ: 457283
这是一篇自己写于一年前的工作文档,分享出来。
一、WebKit简介
二、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 |
URL Cache载入器对象,该对象实现 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.1 Java层框架
3.1.1 主要类关系
WebKit模块的 Java层一共由 41个文件组成,其中主要的类关系如下图所示:
-
WebView
WebView类是 WebKit模块 Java层的视图类,所有需要使用 Web浏览功能的 Android应用程序都要创建该视图对象显示和处理请求的网络资源。目前, WebKit模块支持 HTTP、 HTTPS、 FTP以及 javascript请求。 WebView作为应用程序的 UI接口,为用户提供了一系列的网页浏览、用户交互接口,客户程序通过这些接口访问 WebKit核心代码。
-
WebViewDatabase
WebViewDatabase是 WebKit模块中针对 SQLiteDatabase对象的封装,用于存储和获取运行时浏览器保存的缓冲数据、历史访问数据、浏览器配置数据等。该对象是一个单实例对象,通过 getInstance方法获取 WebViewDatabase的实例。 WebViewDatabase是 WebKit模块中的内部对象,仅供 WebKit框架内部使用。
-
WebViewCore
WebViewCore类是 Java层与 C层 WebKit核心库的交互类,客户程序调用 WebView的网页浏览相关操作会转发给 BrowserFrame对象。当 WebKit核心库完成实际的数据分析和处理后会回调 WebViweCore中定义的一系列 JNI接口,这些接口会通过 CallbackProxy将相关事件通知相应的 UI对象。
-
CallbackProxy
CallbackProxy是一个代理类,用于 UI线程和 WebCore线程交互。该类定义了一系列与用户相关的通知方法,当 WebCore完成相应的数据处理,则会调用 CallbackProxy类中对应的方法,这些方法通过消息方式间接调用相应处理对象的处理方法。详细的处理流程在下文中会具体分析。
-
BrowserFrame
BrowserFrame类负责 URL资源的载入、访问历史的维护、数据缓存等操作,该类会通过 JNI接口直接与 WebKit C层库交互。
-
JWebCoreJavaBridge
该类为 Java层 WebKit代码提供与 C层 WebKit核心部分的 Timer和 Cookies操作相关的方法。
-
DownloadManagerCore
下载管理核心类,该类负责管理网络资源下载,所有的 Web下载操作均有该类同一管理。该类实例运行在 WebKit线程当中,与 UI线程的交互是通过调用 CallbackProxy对象中相应的方法完成。
-
WebSettings
该对象描述了 WEB浏览器访问相关的用户配置信息。
-
DownloadListener
下载侦听接口,如果客户代码实现该接口,则在下载开始、失败、挂起、完成等情况下, DownloadManagerCore对象会调用客户代码中实现的 DwonloadListener方法。
-
WebBackForwardList
WebBackForwarList对象维护着用户访问历史记录,该类为客户程序提供操作访问浏览器历史数据的相关方法。
-
WebViewClient
WebViewClient类定义了一系列事件方法,如果 Android应用程序设置了 WebViewClient派生对象,则在页面载入、资源载入、页面访问错误等情况发生时,该派生对象的相应方法会被调用。
-
WebBackForwardListClient
WebBackForwardListClient对象定义了对访问历史操作时可能产生的事件接口,当用户实现了该接口,则在操作访问历史时(访问历史移除、访问历史清空等)用户会得到通知。
-
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保护方法主要是用于构造与通信协议相关的数据流,以及向 LoadListener发送状态。 buildHeaders方法是向子类提供构造特定协议消息头功能。所有载入器只有一个共有方法( load),因此当需要载入数据时,调用该方法即可。与数据载入流程相关的类还有 LoaderListener以及 BrowserFrame,当数据载入事件发生时, WebKit C库会更新载入进度,并且会通知 BrowserFrame, BroserFrame接收到进度条变更事件后会通过 CallbackProxy对象,通知 View类进度条数据变更。下面以 DataLoader类为例子,说明数据载入以及与 UI交互过程:
上图中绿色部分是 BrowserFrame处理进度变更事件时,调用 CallbackProxy对象通知视图变更状态的操作,在这里省略。途中灰色部分表示 C层代码,而白色部分表示 Java层代码。
3.2 C层框架
3.2.1 C类与 Java类的关系
1 . BrowserFrame
与 BrowserFrame Java类相对应的 C++类为 FrameBridge,该类为 Dalvik虚拟机回调 BrowserFrame类中定义的本地方法进行了封装。与 BrowserFrame中回调函数( Java层)相对应的 C层结构定义如下:
该结构作为 FrameBridge( C层)的一个成员变量( mJavaFrame),在 FrameBridge构造函数中,用 BrowserFrame( Java层)类的回调方法的偏移量初始化 JavaBrowserFrame结构的各个域。初始后,当 WebCore( C层)在剖析网页数据时,有 Frame相关的资源改变,比如 WEB页面的主题变化,则会通过 mJavaFrame结构,调用指定 BrowserFrame对象的相应方法,通知 Java层处理。
2 . JWebCoreJavaBridge
与该对象相对应的 C层对象为 JavaBridge, JavaBridge对象继承了 TimerClient和 CookieClient类,负责 WebCore中的定时器和 Cookie管理。与 Java层 JWebCoreJavaBridge类中方法偏移量相关的是 JavaBridege中几个成员变量,在构造 JavaBridge对象时,会初始化这些成员变量,之后有 Timer或者 Cookies事件产生, WebCore会通过这些 ID值,回调对应 JWebCoreJavaBridge的相应方法。
3 . LoadListener
与该对象相关的 C层结构是 struct resourceloader_t,该结构保存了 LoadListener对象 ID、 CancelMethod ID以及 DownloadFiledMethod ID值。当有 Cancel或者 Download事件产生, WebCore会回调 LoadListener类中的 CancelMethod或者 DownloadFileMethod。
4 . WebViewCore
与 WebViewCore相关的 C类是 WebCoreViewImpl, WebViewCoreImpl类有个 JavaGlue对象作为成员变量,在构建 WebCoreViewImpl对象时,用 WebViewCore( Java层)中的方法 ID值初始化该成员变量。并且会将构建的 WebCoreViewImpl对象指针复制给 WebViewCore( Java层)的 mNativeClass,这样将 WebViewCore( Java层)和 WebViewCoreImple( C层)关联起来。
5 . WebSettings
与 WebSettings相关的 C层结构是 struct FieldIds,该结构保存了 WebSettings类中定义的属性 ID以及方法 ID,在 WebCore初始化时( WebViewCore的静态方法中使用 System.loadLibrary载入)会设置这些方法和属性的 ID值。
6 . WebView
与
WebView相关的
C层类是
WebViewNative,该类中的
mJavaGlue中保存着
WebView
发表评论
-
禁止Android 的锁屏功能. Disable Lock Screen.
2011-05-24 13:11 1959找到的一个帖子,不知道能不能正常的work. K ... -
HTML 5的数据库操作
2011-01-30 21:07 1870现在的项目是要支持9800这款手机。原来的软件是运行在OS5上 ... -
INSTALL_FAILED_INSUFFICIENT_STORAGE
2010-07-07 15:17 5308在使用Android自带的Res\raw或使用Asset时都需 ... -
Android 如何在界面上只显示控件(ViewGroup)的一部分。
2010-06-28 16:11 3179问题是这样的,我用xml配置好的view,使用的是Relati ... -
Android的焦点(Focus)问题
2010-06-08 19:07 6106今天解决了一个Android平台下的焦点问题。发现其中关键问题 ... -
Java开发需要关注的几点
2009-07-08 10:13 0这篇文章主要想把Spring ... -
Spring Hiberante
2009-07-08 09:59 0发现现在的招聘广告仍然充斥的spring,hibernate, ... -
关于JavaEye的论坛小测验
2009-06-11 15:58 894平时都喜欢潜水,不过最近发现这样做不利于自己的提高,本来平时的 ... -
RCP的开发使用记录
2009-05-04 11:22 1016-------------------- 有时,在运行Appl ... -
解决了solaris下java调用外部命令失败的一个小问题
2007-12-07 11:18 1518用Freemind的做的,大家将 ... -
关于Service和Dao的关系
2007-04-12 22:03 3349在新的项目里,没有办法理解Service和Dao的意义,今天在 ...
相关推荐
【正文】 随心所欲的Web页面打印技术是针对基于B/S架构的应用程序中客户端页面打印问题的一种解决方案。传统的Web页面打印方式,如使用IE的内置打印功能或水晶报表,往往无法满足特定的排版和定位需求。...
根据提供的文件信息,可以看出标题与描述均指向了“利用钩子技术控制进程创建”的主题,但实际内容似乎并未直接涉及这一技术细节,而是包含了大量非结构化和个人化的文本信息。因此,下面将基于标题和描述中提及的...
【知识点详解】 1. **情感需求的重视**:40岁的男性在工作和生活中积累了丰富的经验,他们开始渴望更多的家庭温暖和情感互动。他们会喜欢与家人,尤其是孩子一起度过时光,寻找简单快乐,如游戏、亲子活动等。...
转贴:asp.net中的并发控制 并发控制的类型 通常,管理数据库中的并发有三种常见的方法: 保守式并发控制 开放式并发控制 最后的更新生效
"动网转贴"这个主题可能指的是在论坛或者社交网络中实现帖子转发或分享的功能。 动网转贴的源码可能涉及到以下几个方面的知识点: 1. **网络通信**:在实现动网转贴功能时,首先需要与服务器进行交互,发送用户的...
转贴:作者按:当时业界都说CICS思想博大精深,引得版主下大力气苦苦探索,昨日偶然翻了出来,愿意贡献给有需要的网友。后来迫于形式,开始学习使用J2EE、dot NET、XML、PKI、UML、CMM、LINUX等新玩意儿,功夫尚未练...
转贴:配置Windowsxp中的iis使其支持asp_net
"动网转贴"可能是基于易语言编写的一个功能模块或者工具,用于在论坛或者网站之间转移帖子数据。由于压缩包文件名为“易语言动网转贴.rar”,我们可以推测这可能是一个软件开发资源,包含了一些源代码、教程或者是...
在“导电泡棉转贴装置”这个特定的场景下,我们可能是在讨论一种用于电子政务设备或系统中的特殊组件。 导电泡棉是一种具有导电性能的泡沫材料,通常用于电子设备的屏蔽、接地或防静电保护。在电子政务设备中,这种...
【标题】"动网转贴.e.rar"是一个压缩文件,很可能包含了有关动网论坛或社区的相关资源、数据或用户帖子的备份。动网是中国早期知名的网络论坛软件之一,提供了丰富的社区功能,允许用户发帖、回帖、互动等。这个...
【时间管理方法(转贴)】 时间管理是个人和团队高效工作的关键,它涉及到如何规划、组织和优化日常活动,以便在有限的时间内完成更多的任务并实现目标。在这个快速发展的IT行业中,良好的时间管理能力可以帮助程序员...
完全删除sql2005,转贴:【应用】如何彻底删除SQL Server2005 百度空间_应用平台
由于现在流行的转贴工具都是基于浏览器的,转换速度比较慢,还得打开浏览器才能使用(同时受到浏览器版本限制)。 <br> 而这个小程序则完全不依赖于浏览器,以BFC采集器的UBB转换模块为基础,转换速度超快,...
标题中的“论坛专用屏蔽干扰码转贴工具”指的是一个专为论坛设计的软件,它的主要功能是处理并转换论坛上常见的干扰码,以便用户能够顺利地复制和粘贴信息。在论坛交流中,有时为了防止恶意爬虫或者保护内容不被搜索...
《动易系统的论坛转贴工具详解与应用》 在互联网信息交流日益频繁的今天,论坛作为用户互动的重要平台,其内容分享与传播的作用不容忽视。动易系统的论坛转贴工具,便是为了解决用户在论坛间便捷分享内容而设计的一...