我们已经知道,浏览器的实现包含Apk和Webkit两大组成模块,Framework层提供模块间的接口,体现关注点分离(SoC)原则。Apk和Webkit模块可以分别开发维护。

 研究复杂系统,首先从系统模块间的接口入手。我们先来研究Framework层定义了怎样的模块间接口。

 Framework层的基本类是android.webkit.WebView,参考官方文档:

 http://developer.android.com/reference/android/webkit/WebView.html

 简单总结:

 1. WebView类继承关系间下图,可见Webview是一个标准的Android View类,可以将它加入你的Activity的ContentView里。


java.lang.Object

android.view.View


android.view.ViewGroup



android.widget.AbsoluteLayout




android.webkit.WebView

 2. WebView是显示Web页面的View,此外,它还提供Forward和Backward,Zoom in和Zoom out,以及文本Search的功能。

 3. 基本用法:

WebView webview = new WebView(this);
setContentView(webview);
// Simplest usage: note that an exception will NOT be thrown
// if there is an error loading this page (see below).
webview.loadUrl("http://slashdot.org/");

 4. 几个Customization Points:

  • Creating and setting a WebChromeClient subclass.用于处理一些有可能影响浏览器UI对象的事件,比如进度条更新,JavaScript告警等。

  • Creating and setting a WebViewClient subclass.用于处理与网页内容的渲染有关的事件,比如网页错误或者Form提交等。你也可以进行Url拦截,一个典型例子是提供动态主页功能。

  • Modifying the WebSettings, such as enabling JavaScript with setJavaScriptEnabled().

  • Injecting Java objects into the WebView using the       addJavascriptInterface(Object, String) method. 这让你可以在网页的JavaScript Context中注入Java对象,这样JavaScript就可以与你的Java 对象进行交互。好东西,这通常用于你为自己的网站开发定制的Apk客户端。

这样,WebView,WebChromeClient, WebViewClient和WebSetting这几个类一起组成了WebView Package对应用层提供的Facade。具体的类的代码不去研究,对Framework提供的接口暂时学习到此,接下来我们看一下Apk层。