版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、一、WebKit 簡介WebKit 是一個開源的瀏覽器網(wǎng)頁排版引擎,包含WebCore 排版引擎和JSCore引擎。WebCore 和JSCore 引擎來自于KDE 項目的KHTML 和KJS 開源項目。Android的 Web引擎框架采用了WebKit 項目中的WebCore 和JSCore 部分,上層由 Java 語言封裝,并且作為API 提供給Android 應用開發(fā)者,而底層使用WebKit庫(WebCore和JSCore)進行網(wǎng)頁排版。二、WebKit 目錄結構Android的WebKit 模塊分成Java 和WebKit 庫兩個部分,其目錄結構如下表所示:WebKit 模塊目錄結構
2、Java 層(根目錄 devicejavaandroidandroidwebkit)BrowserFrame.javaBrowserFrame 對象是對WebCore 庫中的Frame 對 象的 Java 層封裝,用于創(chuàng)建 WebCore 中定義的 Frame,以及為該Frame對象提供Java 層回調方法 ByteArrayBuilder.javaByteArrayBuilder 輔助對象,用于byte 塊鏈表的處理。CachLoader.javaURL Cache 載入器對象,該對象實現(xiàn)StreadLoader 抽象基類,用于通過CacheResult 對象載入內容數(shù)據(jù)。CacheMana
3、ger.javaCache 管理對象,負責Java 層Cache 對象管理CacheSyncManager.javaCache 同步管理對象,負責同步 RAM 和 FLASH 之間的瀏覽器 Cache 數(shù)據(jù)。實際的物理數(shù)據(jù)操作在WebSyncManager 對象中完成。CallbackProxy.java該對象是用于處理WebCore 與UI線程消息的 類。當有Web 事件產(chǎn)生時WebCore 線程會調用該回調類,類會通過消息的方式通知 UI 線 程,并且調用設置的客戶對象的回調函數(shù)。CellList.javaCellList 定義集合中的Cell,管理Cell的 繪制、狀態(tài)改變以及索引。Ma
4、nager.java根據(jù)RFC2109 規(guī)范,管理sSyncManager.javas 同步管理對象,該對象負責同步 RAM 和Flash 之間的s 數(shù)據(jù)。實際的物理數(shù)據(jù)操作在基類WebSyncManager 中完成。DataLoader.java數(shù)據(jù)載入器對象,用于載入網(wǎng)頁數(shù)據(jù)。DateSorter.java尚未使用DownloadListener.java偵接口DownloadManagerCore.java管理器對象,管理列表。該對象運行在WebKit 的線程中,通過 CallbackProxy 對象與 UI 線程交互。FileLoader.java文件載入器,將文件數(shù)據(jù)載入到Frame
5、 中。FrameLoader.javaFrame 載入器,用于載入網(wǎng)頁Frame 數(shù)據(jù)HttpAuthHandler.javaHttp 認證處理對象,該對象會作為參數(shù)傳遞給 BrowserCallback.displayHttpAuthDialog 方法,與用戶交互。HttpDaime.java該對象是處理HTTP 日期的輔助對象。JsConfirmResult.javaJs 確認請求對象JsPromptResult.javaJs 結果提示對象,用于向用戶提示Javascript 運行結果。JsResult.javaJs 結果對象,用于用戶交互JWebCoreJavaBridge.java用
6、Java 與WebCore 庫中Timer 和s 對象交互的橋接代碼。LoadListener.java載入器偵,用于處理載入器偵聽消息。Network.java該對象封裝網(wǎng)絡連接邏輯,為調用者提供更為高級的網(wǎng)絡連接接口。PanZoom.java用于處理縮放、移動等操作PanZoomCellList.java用于保存移動、縮放的CellPerfChecker.java用于效率測試的功能對象?SslErrorHandler.java用于處理 SSL 錯誤消息。StreamLoader.javaStreamLoader 抽象類是所有內容載入器對象的基 類。該類是通過消息方式控制的狀態(tài)機,用于將數(shù)據(jù)
7、載入到Frame 中。TextDialog.java用于處理 html 中文本區(qū)域疊加情況,可以使用標 準的文本編輯而定義的特殊EditText 控件。URLUtil.javaURL 處理功能函數(shù),用于編碼URL 字符串 以及提供附加的 URL 類型分析功能。WebBackForwardList.java該對象包含WebView 對象中顯示的歷史數(shù)據(jù)。WebBackForwardListC nt.java瀏覽歷史處理的客戶接口類,所有需要接收瀏覽歷史改變的類都需要實現(xiàn)該接口。WebChromeC nt.javaChrome 客戶基類,Chrome 客戶對象在瀏覽器文檔標題、進度條、圖標改變時候
8、會得到通知。WebHistoryItem.java該對象用于保存一條網(wǎng)頁歷史數(shù)據(jù)WebIconDataBase.java圖表數(shù)據(jù)庫管理對象,所有的WebView 均請求相同的圖標數(shù)據(jù)庫對象。Java 層框架主要類關系WebKit 模塊的Java 層一共由 41 個文件組成,其中主要的類關系如下圖所示:三、WebKit 模塊框架Android的WebKit 模塊由Java 層和WebKit 庫兩個部分組成,Java 層負責與Android 應用程序進行通信,而 WebKit 類庫負責實際的網(wǎng)頁排版處理。Java 層和 C 層庫之間通過JNI 和Bridge相用,如下圖所示:WebSettings
9、.javaWebView 的管理設置數(shù)據(jù),該對象數(shù)據(jù)是通過JNI接口從底層獲取。WebSyncManager.java數(shù)據(jù)同步對象,用于RAM 數(shù)據(jù)和FLASH 數(shù)據(jù)的同步操作。WebView.javaWeb 視圖對象,用于基本的網(wǎng)頁數(shù)據(jù)載入、顯示等 UI 操作。WebViewC nt.javaWeb 視圖客戶對象,在 Web 視圖中有事件產(chǎn)生時該對象可以獲得通知。WebViewCore.java該對象對WebCore 庫進行了封裝,將 UI 線程中的數(shù)據(jù)請求發(fā)送給 WebCore 處理, 并且通過 CallbackProxy 的方式,通過消息通知 UI 線程數(shù)據(jù)處理的結果。WebViewDa
10、tabase.java該對象使用Database 為WebCore 模塊提供數(shù)據(jù)存取操作。1.WebViewWebView 類是 WebKit 模塊 Java 層的視圖類,所有需要使用 Web 瀏覽功能的 Android 應用程序都要創(chuàng)建該視圖對象顯示和處理請求的網(wǎng)絡資源。目前,WebKit 模塊支持HTTP、HTTPS、FTP 以及javascript 請求。WebView 作為應用程序的 UI 接口,為用戶提供了一系列的網(wǎng)頁瀏覽、用戶交互接口,客戶程序通過這些接口WebKit代碼。1.WebViewDatabaseWebViewDatabase 是WebKit 模塊中針對Database
11、對象的封裝,用于和獲取運行時瀏覽器保存的緩沖數(shù)據(jù)、歷史數(shù)據(jù)、瀏覽器配置數(shù)據(jù)等。該對象是一個單實例對象,通過getInstance 方法獲取WebViewDatabase 的實例。WebViewDatabase 是WebKit 模塊中的內部對象,WebKit 框架。1.CallbackProxyCallbackProxy 是一個類,用于 UI 線程和WebCore 線程交互。該類定義了一系列與用戶相關方法,當WebCore 完成相應的數(shù)據(jù)處理,則會調用CallbackProxy 類中對應的方法,這些方法通過消息方式間接調用相應處理對象的處理方法。詳細的處理流程在下文中會具體分 析。1.Brows
12、erFrame1.WebViewCoreWebViewCore 類是Java 層與C 層WebKit 庫的交互類,客戶程序調用 WebView 的網(wǎng)頁瀏覽相關操作會轉發(fā)給 BrowserFrame 對象。當 WebKit 庫完成實際的數(shù)據(jù)分析和處理后會回調WebViweCore 中定義的一系列JNI 接口,這些接口會通過 CallbackProxy 將相關事件通知相應的 UI 對象。方法。1.DownloadManagerCore該類實例運行在WebKit 線程當中,與 UI 線程的交互是通過調用CallbackProxy 對象中相應的方法完成。1.WebSettings該對象描述了 WEB
13、瀏覽器相關的用戶配置信息。1.DownloadListener偵聽接口,如果客戶代碼實現(xiàn)該接口,則在開始、失敗、掛起、完成等情況下,DownloadManagerCore 對象會調用客戶代碼中實現(xiàn)的DwonloadListener 方法。1.WebBackForwardListWebBackForwarList 對象歷史數(shù)據(jù)的相關方法。著用戶歷史,該類為客戶程序提供操作瀏覽器1.WebViewCntWebViewCnt 類定義了一系列事件方法,如果 Android 應用程序設置了 WebViewCnt被派生對象,則在頁面載入、資源載入、頁面調用。錯誤等情況發(fā)生時,該派生對象的相應方1.WebB
14、ackForwardListC ntWebBackForwardListC nt 對象定義了對歷史操作時可能產(chǎn)生的事件接口,當用戶實現(xiàn)了該接口,則在操作歷史時(歷史移除、歷史清空等)用戶會得到通知。1.WebChromeCntWebChromeCnt 類定義了與瀏覽窗口修飾相關的事件。例如接收到 Title、接收到 Icon、進度變化時,WebChromeC nt 的相應方被調用。主要類的設計數(shù)據(jù)載入器的設計WebKit 模塊的 Java 部分框架中使用數(shù)據(jù)載入器來加載相應類型的數(shù)據(jù),目前有 CacheLoader、DataLoader 以及 FileLoader 三類載入器,他們分別用于處理
15、緩存數(shù)據(jù)、內存據(jù),以及文件數(shù)據(jù)的載入操作。Java 層(WebKit 模塊)所有的載入器都從StreamLoader 繼承(其父類為 Handler),由于 StreamLoader 類的基類為 Handler 類,因此在構造載入器時,會開啟一個事件處理線程,該線程負責實際的數(shù)據(jù)載入操作,而請求線程通過消息的方式驅動數(shù)據(jù)的載入。下圖是數(shù)據(jù)載入器相關類的類圖結構:管理類,該類負責管理網(wǎng)絡資源,所有的Web操作均有該類同一管理。BrowserFrame 類負責 URL 資源的載入、歷史的、數(shù)據(jù)緩存等操作,該類會通過JNI 接口直接與WebKit C 層庫交互。1.JWebCoreJavaBridg
16、e該類為 Java 層WebKit 代碼提供與 C 層 WebKit部分的 Timer 和s 操作相關的StreamLoader 類定義了 4 個不同的消息(MSG_SUS、MSG_HEADERS、MSG_DATA、MSG_END),分別表示發(fā)送狀態(tài)消息、發(fā)送消息頭消息、發(fā)送數(shù)據(jù)消息以及數(shù)據(jù)發(fā)送完畢消息。該類提供了 2 個抽象保護方法以及一個共有方法:setupStreamAndSendS us 保護方法主要是用于構造與通信協(xié)議相關的數(shù)據(jù)流,以及向 LoadListener 發(fā)送狀態(tài)。buildHeaders 方法是向子類提供構造特定協(xié)議消息頭功能。所有載入器只有一個共有方oad),因此當需要
17、載入數(shù)據(jù)時,調用該方法即可。與數(shù)據(jù)載入流程相關的類還有 LoaderListener 以及BrowserFrame,當數(shù)據(jù)載入事件發(fā)生時, WebKit C 庫會更新載入進度,并且會通知 BrowserFrame,BroserFrame 接收到進度條變更事件后會通過 CallbackProxy 對象,通知 View 類進度條數(shù)據(jù)變更。下面以 DataLoader類為例子,說明數(shù)據(jù)載入以及與 UI 交互過程:上圖中綠色部分是BrowserFrame 處理進度變更事件時,調用 CallbackProxy 對象通知視圖變更狀態(tài)的操作,在這里省略。途中灰色部分表示C 層代碼,而白色部分表示Java 層
18、代碼。C 層框架C 類與 Java 類的關系1BrowserFrame與 BrowserFrame Java 類相對應的 C+類為 FrameBridge,該類為 Dalvik 虛擬機回調 BrowserFrame 類中定義的本地方法進行了封裝。與BrowserFrame 中回調函數(shù)(Java 層)相對應的C 層結構定義如下:該結構作為 FrameBridge(C 層)的一個成員變量(mJavaFrame),在 FrameBridge 構造函數(shù)中,用BrowserFrame(Java 層)類的回調方法的偏移量初始化JavaBrowserFrame 結構的各個域。初始后,當WebCore(C 層
19、)在剖析網(wǎng)頁數(shù)據(jù)時,有 Frame 相關的資源改變,比如WEB頁面的變化,則會通過 mJavaFrame 結構,調用指定 BrowserFrame 對象的相應方法,通知Java 層處理。2JWebCoreJavaBridge與該對象相對應的 C 層對象為 JavaBridge,JavaBridge 對象繼承了 TimerCnt 和Cnt 類,負責 WebCore 中的定時器和管理。與 Java 層JWebCoreJavaBridge 類中方法偏移量相關的是JavaBridege 中幾個成員變量,在構造 JavaBridge 對象時,會初始化這些成員變量,之后有 Timer 或者JWebCore
20、JavaBridge 的相應方法。3LoadListeners 事件產(chǎn)生,WebCore 會通過這些 ID 值, 回調對應與該對象相關的C 層結構是struct resourceloader_t,該結構保存了 LoadListener 對象ID、 CancelMethod ID 以及DownloadFiledMethod ID 值。當有Cancel 或者Download 事件產(chǎn)生,WebCore會回調LoadListener 類中的CancelMethod 或者DownloadFileMethod。4WebViewCore與 WebViewCore 相關的 C 類是 WebCoreViewIm
21、pl,WebViewCoreImpl 類有個 JavaGlue對象作為成員變量,在構建 WebCoreViewImpl 對象時,用 WebViewCore(Java 層)中的方法 ID值初始化該成員變量。并且會將構建的 WebCoreViewImpl 對象指針給 WebViewCore(Java層)的mNativeClass,這樣將WebViewCore(Java 層)和 WebViewCoreImple(C 層)關聯(lián)起來。5WebSettings與 WebSettings 相關的 C 層結構是 struct FieldIds,該結構保存了WebSettings 類中定義的屬性 ID 以及方法
22、 ID,在 WebCore 初始化時(WebViewCore 的靜態(tài)方法中使用System.loadLibrary載入)會設置這些方法和屬性的 ID 值。6WebView與WebView 相關的C 層類是 WebViewNative,該類中的 mJavaGlue 中保存著WebView 中定義的屬性和方法 ID,在 WebViewNative 構造方法中初始化,并且將構造的 WebViewNative 對象的指針,賦值給 WebView 類的 mNativeClass 變量,這樣 WebView 和WebViewNative 對象建立了關系。3.2.2 主要類關系與Java 層相關的C 層類如
23、下表所示:類ChromeC ntAndroid功能描述該類主要處理 WebCore 中與 Frame 裝飾相關的操作。例如設置狀態(tài)欄、滾動條、Javascript提示框等。當瀏覽器中有相關事件產(chǎn)生, ChromeC ntAndroid 類的相應方被調用,該類會將相關的UI 事件通過Bridge 傳遞給Java 層 由Java 層負責繪制以及用戶交互方面的處理。EditorC ntAndroid該類負責處理頁面中文本相關的處理,比如文本 輸入、取消、輸入法數(shù)據(jù)處理、文本黏貼、文本編輯等操作。不過目前該類只對按鍵相關的時間進行了處理,其他操作均未支持。ContextC nt該類提供頁面相關的功能菜
24、單,比如 拷貝、 朗讀、查找等功能。但是,目前項目中未實現(xiàn)具體功能。DragCnt該類定義了與頁面拖拽相關的處理,但是目前該 類沒有實現(xiàn)具體功能。FrameLoaderCntAndroid該類提供與Frame 加載相關的操作,當用戶請求加載一個頁面時,WebCore 分析完網(wǎng)頁數(shù)據(jù)后, 會通過該類調用Java 層的回調方法,通知 UI 相關的組件處理。InspectorC ntAndroid該類提供與窗口相關的操作,比如窗口顯示、關 閉窗口、附加窗口等。不過目前該類的各個方法均為空實現(xiàn)。Page該類提供與頁面相關的操作,比如網(wǎng)頁頁面的前進、后退等操作。FrameAndroid該類為Androi
25、d 提供Frame 管理。FrameBridge該類對Frame 相關的 Java 層方法進行了封裝,當 有Frame 事件產(chǎn)生時,WebCore 通過FrameBridge回調 Java 的回調函數(shù),完成用戶交互過程。AssetManager該類為瀏覽器提供本地資源功能。RenderSkinAndroid該類與控件繪制相關,所有的須繪制控件都需要以上幾個類會在Java 層請求創(chuàng)建Web Frame 的時候被建立,他們的關系如下圖所示:上圖中標注為深綠色的FrameAndroid 是瀏覽器Frame,一個BrowserFrame 對象對應著一個FrameAndroid 對象。而其他 8 個標注
26、為淡綠色的類,是與該Frame從該類派生,目前 WebKit 模塊中有 Button、Combo、Radio 三類控件。顯示、布局等相關的類。WebKit 模塊中所有WebCore代碼與用戶交互的操作使用FrameAndroid 對象中的Bridge 處理(回調相應的Java 方法)。四、基本操作分析4.1 WebKit 模塊初始化Android SDK 中提供了 WebView 類,該類為客戶提供客戶化瀏覽顯示的功能,如果客戶需要加入瀏覽器的支持,可將該類的實例或者派生類的實例作為視圖,調用 Activity 類的 setContentView 顯示給用戶。當客戶代碼中生成第一次生成WebV
27、iew 對象時,會初始化WebKit庫(包括 Java 層和C 層兩個部分),之后用戶可以操作 WebView 對象完成網(wǎng)絡或者本地資源的。WebView 對 象 的 生 成 主 要 涉 及 3 個類 CallbackProxy 、 WebViewCore 以及 WebViewDatabase。其中 CallbackProxy 對象為 WebKit 模塊中 UI 線程和 WebKit 類庫提供交互功能,WebViewCore 是WebKit 的層,負責與C 層交互以及WebKit 模塊C 層類庫初始化,而 WebViewDatabase 為 WebKit 模塊運行時緩存、數(shù)據(jù)提供支持。WebK
28、it 模塊初始化流程如下:WebView+創(chuàng)建CallbackProxy 對象+創(chuàng)建WebViewCore 對象1調用System.loadLibrary 載入webcore 相關類庫(C 層)2如果是第一次初始化WebViewCore 對象,創(chuàng)建WebCoreTherad 線程3創(chuàng)建EventHub 對象,處理WebViewCore 事件4獲取WebIconDatabase 對象實例5向WebCoreThread 發(fā)送初始化消息+獲取WebViewDatabase 實例如上所敘,第一步調用 System.loadLibrary 方法載入 webcore 相關類庫,該過程由 Dalvik虛擬機
29、完成,它會從動態(tài) 庫目錄中尋找libWebCore.so 類庫,載入到內存中,并且調用 WebKit初始化模塊的JNI_OnLoad 方法。WebKit 模塊的JNI_OnLoad 方法中完成了如下初始化操作:a) 初始化 framebridgeregister_android_webcore_framebridge初始化gFrameAndroidField 靜態(tài)變量,以及BrowserFrame 類中的本地方法表。b) 初始化javabridgeregister_android_webcore_javabridge初始化gJavaBridge mObject 對象,以及JWebCoreJav
30、aBridge 類中的本地方法c) 初始化資源loaderregister_android_webcore_resource_loader初始化gResourceLoader 靜態(tài)變量,以及LoadListener 類的本地方法d) 初始化webviewcoreregister_android_webkit_webviewcore初始化gWebCoreViewImplField 靜態(tài)變量,以及WebViewCore 類的本地方法e) 初始化webhistoryregister_android_webkit_webhistory初始化gWebHistoryItem 結構,以及的本地方法WebBa
31、ckForwardList 和WebHistoryItem 類初始化webicondatabaseregister_android_webkit_webicondatabaseWebIconDatabase 類的本地方法初始化websettingsregister_android_webkit_websettings初始化gFieldIds 靜態(tài)變量,以及WebSettings 類的本地方法h) 初始化webviewregister_android_webkit_webview初始化gWebViewNativeField 靜態(tài)變量,以及WebView 類的本地方法第二步是 WebCoreThr
32、ead 初始化,該初始化只在第一次創(chuàng)建 WebViewCore 對象時完成,當用戶代碼第一次生成 WebView 對象,會在初始化 WebViewCore 類時創(chuàng)建 WebCoreThread 線程,該線程負責處理 WebCore 初始化事件。此時 WebViewCore 構造函數(shù)會被阻塞,直到一個 WebView 初始化請求完畢時,會在WebCoreThread 線程中喚醒。第三步創(chuàng)建 EventStub 對象,該對象處理 WebView 類的事件,當 WebCore 初始化完成后會向WebView 對象發(fā)送事件,WebView 類的EventStub 對象處理該事件,并且完成后續(xù)初始化工作
33、。第四步獲取WebIconDatabase 對象實例。第五步向 WebViewCore 發(fā)送 INITIALIZE 事件,并且將 this 指針作為消息內容傳遞。 WebView 類主要負責處理 UI 相關的事件,而WebViewCore 主要負責與WebCore 庫交互。在運行時期,UI 線程和WebCore 數(shù)據(jù)處理線程是運行在兩個獨立的線程當中。WebCoreThread 線程接收到INITIALIZE 線程后,會調用消息對象參數(shù)的initialize 方法,而后喚醒阻塞的WebViewCoreJava 線程(該線程在 WebViewCore 的構造函數(shù)中被阻塞)。不同的 WebView
34、 對象實例有不同的WebViewCore 對象實例,因此通過消息的方式可以使得 UI 線程和WebViewCore 線程解耦合。WebCoreThread 的事件處理函數(shù),處理 INITIALIZE 消息時,調用的是不同 WebView 中 WebViewCore 實例的initialize 方法。WebViewCore 類中的initialize 方法中會創(chuàng)建BrowserFrame對象(該對象管理整個 WEB 窗體,以 frame 相關事件), 并且向 WebView 對象發(fā)送 WEBCORE_INITIALIZED_MSG_ID 消息。WebView 消息處理函數(shù),會根據(jù)消息參數(shù) 1 初
35、始化指定的WebViewCore 對象,并且更新WebViewCore 的Frame 緩沖。初始化過程的序列圖如下圖所示:初始化完成后Java 層和C 層類圖關系如下圖所示上圖中淡綠色的類表示Java 層,而灰色類表示C 層。數(shù)據(jù)載入載入網(wǎng)絡數(shù)據(jù)客戶代碼中可以使用 WebView 類的 loadUrl 方法,請求指定的 URL 網(wǎng)頁數(shù)據(jù)。WebView 對象中保存著 WebViewCore 的,由于 WebView 屬于 UI 線程,而 WebViewCore屬于線程,因此WebView 對象的loadUrl 被調用時,會通過消息的方式將URL 信息傳遞給WebViewCore 對象,該對象會
36、調用成員變量mBrowserFrame 的 loadUrl 方法,進而調用WebKit庫完成數(shù)據(jù)的載入。其調用函數(shù)序列如下所示:網(wǎng)絡數(shù)據(jù)的載入分別由Java 層和C 層共同完成,Java 層完成用戶交互、資源等操作,而 C 層主要完成數(shù)據(jù)分析(建立 DOM 樹、分析頁面元素等)操作。由于 UI 線程和 WebCore線程運行在不同的兩個線程中,因此當用戶請求網(wǎng)絡資源時,通過消息的方式向WebViewCore 對象發(fā)送載入資源請求。在 Java 層的 WebKit 模塊中,所有與資源載入相關的操作都是由BrowserFrame 類中對應的方法完成,這些方法是本地方直接調用WebCore 庫的C
37、層函數(shù)完成數(shù)據(jù)載入請求,以及資源分析等操作。如上圖所示,C 層的FrameLoader 類是瀏覽框架的資源載入器,該類負責檢查策略以及向 Java 層發(fā)送資源請求等功能。在FrameLoader 中,當用戶請求網(wǎng)絡資源時,經(jīng)過一系列的策略檢查后會調用 FrameBridge 的startLoadingResource 方法,該方回調BrowserFrame(Java)類的 startLoadingResource 方法,完成網(wǎng)絡數(shù)據(jù)的,而后 BrowserFrame(Java)類的 startLoadingResource 方返回一個LoadListener 的對象,F(xiàn)rameLoader 會
38、刪除原有的FrameLoader 對象,將 LoadListener 對象封裝成ResourceLoadHandler 對象,并且將其設置為新的FrameLoader。到此完成了一次資源請求,接下來的任務即是WebCore 庫會根據(jù)資源數(shù)據(jù)進行分析和構建 DOM,以及相關的數(shù)據(jù)結構。4.2.2 載入本地數(shù)據(jù)本地數(shù)據(jù)是以 data:/ 開頭的 URL 表示, 載入過程和網(wǎng)絡數(shù)據(jù)一樣, 只不過在執(zhí)行FrameLoader 類的execuoad 方法時,會根據(jù) URL 的SCHEME 類型區(qū)分,調用DataLoader 的requestUrl 方法(參看 節(jié)對載入器的分析),而不是調用 handle
39、HTTPLoad 建立實際的網(wǎng)絡通信連接。4.2.3 載入文件數(shù)據(jù)文件數(shù)據(jù)是以 file:/開頭的 URL,載入的基本流程與網(wǎng)絡數(shù)據(jù)載入流程基本一致,不同的是在運行FrameLoader 類的execuoad 方法時,根據(jù)SCHEME 類型,調用FileLoader 的requestUrl方法,完成數(shù)據(jù)加載(參看 節(jié)對載入器的分析)。刷新繪制當用戶拖動滾動條、有窗口遮蓋、或者有頁面事件觸發(fā)都會向 WebViewCore(Java 層)對象發(fā)送背景重繪消息,該消息會引起網(wǎng)頁數(shù)據(jù)的繪制操作。WebKit 的數(shù)據(jù)繪制可能出于效率上的考慮,沒有通過 Java 層,而是直接在 C 層使用 SGL 庫完成
40、。與 Java 層圖形繪制相關的 Java對象有如下幾個:Picture 類該類對 SGL 封裝,其中變量 mNativcture 實際上是保存著 SkPicture 對象的指針。WebViewCore 中定義了兩個 Picture 對象, 當作雙緩沖處理, 在調用webKitDraw 方法時,會交換兩個緩沖區(qū),刷新速度。 1.WebView 類 該類接受用戶交互相關的操作,當有滾屏、窗口遮蓋、用戶點擊頁面按鈕等相關 操作 時 , WebView 對 象會 與 之 相關 的 WebViewCore 對 象發(fā) 送 VIEW_SIZE_CHANGED 消息。當WebViewCore 對象接收到該消息后,將構建 時建立的mContentPictureB 刷新到屏幕上,然后將mContentPictureA 與之交換。1. WebViewCore 類 該類封裝了 WebKit C 層代碼,為視圖類提供對 WebKit 的操作接口,所有對 WebKit 庫的用戶請求均由該類處
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 證券公司圍護樁施工合同
- 道路施工隊合作協(xié)議
- 農村房屋拆遷補償合同
- 劇院排水設施安裝合同
- 培訓零售環(huán)境防疫措施
- 醫(yī)療器械招投標規(guī)范解讀
- 無抵押企業(yè)借款合同
- 通信設備質量管理辦法
- 商業(yè)綜合體二手房交易合同范文
- 制造執(zhí)行系統(tǒng)操作與應用課件 3-4-2典型離散制造工藝
- 天津市2024年七年級上學期數(shù)學期中考試試卷【附答案】
- 中國汽車剎車盤行業(yè)投資分析、市場運行態(tài)勢研究報告-智研咨詢發(fā)布
- “雙減”政策下作業(yè)設計策略4篇
- 普外科重點??圃u審工作匯報
- 2024-2025學年初中音樂九年級上冊湘藝版(2024)教學設計合集
- 2024-2025學年北師大版九年級數(shù)學上冊期中綜合復習題
- 第十五屆全國交通運輸行業(yè)“百通科信杯”機動車檢測工(學生組)理論知識題庫
- 培訓學校與學生的合同(2篇)
- 小學高年級閱讀指導課教案(12篇)
- 2024-2030年中國EVOH(乙烯-乙烯醇共聚物)行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略分析報告
- 2024年國家公務員考試公共法律知識考試題庫及答案(共530題)
評論
0/150
提交評論