我们已经知道,浏览器的实现包含Apk和Webkit两大组成模块,Framework层提供模块间的接口,体现关注点分离(SoC)原则。Apk和Webkit模块可以分别开发维护。
研究复杂系统,首先从系统模块间的接口入手。我们先来研究Framework层定义了怎样的模块间接口。
Framework层的基本类是android.webkit.WebView,参考官方文档:
简单总结:
1. WebView类继承关系间下图,可见Webview是一个标准的Android View类,可以将它加入你的Activity的ContentView里。
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
subclass.用于处理一些有可能影响浏览器UI对象的事件,比如进度条更新,JavaScript告警等。
Creating and setting a
subclass.用于处理与网页内容的渲染有关的事件,比如网页错误或者Form提交等。你也可以进行Url拦截,一个典型例子是提供动态主页功能。
Modifying the
, such as enabling JavaScript with
.
Injecting Java objects into the WebView using the
method. 这让你可以在网页的JavaScript Context中注入Java对象,这样JavaScript就可以与你的Java 对象进行交互。好东西,这通常用于你为自己的网站开发定制的Apk客户端。
这样,WebView,WebChromeClient, WebViewClient和WebSetting这几个类一起组成了WebView Package对应用层提供的Facade。具体的类的代码不去研究,对Framework提供的接口暂时学习到此,接下来我们看一下Apk层。