Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android4.4系統浏覽器Chromium實現的加載模塊與流程

Android4.4系統浏覽器Chromium實現的加載模塊與流程

編輯:關於Android編程

本文只描述Http網絡請求相關的信息,Https、Spdy、file、ftp、websocket等的類型只提及在哪裡出現關系分支。

 

代碼層次圖如下:

+----------------------------------------+
|     WebView.java (SDK public API)      |
+----------------------------------------+
|      Android & Chromium Wrapper        | Java橋接和封裝層
+----------------------------------------+
|   Content Module (Navigation Control)  | 核心層,加載流程中負責各種跳轉
+----------------------------------------+
|     blink public web API (WebView)     | web api供外部操控內核
+----------------------------------------+
|                WebCore                 | 原有WebCore的頭尾被砍掉抽離形成blink
+----------------------------------------+
|  blink public platform API  (Network)  | platform api要求外部實現
+----------------------------------------+
|      Content Module (I/O thread)       | 對上層的實現,在IO線程中操作
+----------------------------------------+
|            Network Stack               | 網絡庫
+----------------------------------------+

下面是功能模塊層次圖(詳細圖中的黃色標簽的索引):

+--------------------------------------------+
|            Browser Application             | 浏覽器程序
+--------------------------------------------+
|          package android.webkit            | SDK API
+--------------------------------------------+
|    package com.android.webview.chromium    | Android橋接層
+--------------------------------------------+
|    package org.chromium.android_webview    | Chromium封裝層
+--------------------------------------------+
|    package org.chromium.content.browser    | Chromium Android平台代碼
+--------------------------------------------+
|        content Module Browser Side         | Content模塊Browser端的處理
+--------------------IPC---------------------+
|       content Module Renderer Side         | Content模塊Renderer端的處理
+--------------------------------------------+
|            blink public Web API            |
+--------------------------------------------+
|                  WebCore                   |
+--------------------------------------------+
|          blink public Platform API         |
+--------------------------------------------+
|   content Module implementation of blink   | content實現blink的接口
+--------------------IPC-------------------- +
|      content Module Loading Control        | 加載流程控制
+--------------------------------------------+
|            net Module public API           | net庫的對外接口層
+--------------------------------------------+
|                Job Factory                 | 任務工廠(區分網絡協議)
+--------------------------------------------+
|         Transaction & HttpCache            | 事務與HttpCache
+--------------------------------------------+
|                |   Session & Socket Pool   | 會話與Socket Pool
|     stream     |---------------------------| 流
|                |      DNS & HostCache      | 
+--------------------------------------------+
|                   socket                   |
+--------------------------------------------+ 

 

簡化的消息流如下:

  1. 在Browser進程的UI線程開始WebView.loadUrl經過多層橋接,到達ContentViewCore.java這個類轉入JNI代碼content::ContentViewCoreImpl由NavigationControllerImpl包裝好URL發起C++形式的請求,並由RenderFrameHostImpl將它轉化為IPC消息發去Renderer進程Renderer進程中經過IPC機制處理後,到達RenderFrameImpl,然後消息流過blink和WebCore層,最後到達WebURLLoaderImpl負責實際加載WebURLLoaderImpl通過IPCResourceLoaderBridge發送IPC消息給Browser進程的I/O線程進行網絡數據I/O這個消息經IPC機制處理後由ResourceDispatcherHostImpl接收,然後交給content::ResourceLoader來控制net庫進行網絡通信獲取數據net庫經過HttpCache(Memory | Disk)、DNS(HostCache)、connect(SSL握手)、write、read後,得到的數據最後通過ResourceMessageFilter發出IPC消息回去Renderer進程WebCore獲取到數據後,通過PostTask交由解析線程處理

    下面是詳細的類間關系/層次圖。看圖提示:

    1. package開頭的層是java類不同層次有同名的類則都標出命名空間,如ResourceLoader、FrameTree如果一個純虛類只有單個實現,則縮寫成 基類名|Impl是從使用者的角度按數據流向來分層次高低,並按功能集聚來劃分模塊(這是個人理解,非官方文檔說明)如果A類跟B類的基類發生聯系,則實際是由B類和A類交互。 橫線表示區分功能模塊/包/命名空間。黃色矩形標簽表示此層的功能/意義。灰色矩形是對這層的說明。第一遍,只看黃色標簽,知道有哪些層次和層次間關系;第二遍,看你關心的層,包含該層的說明以及和上下層的銜接。如果有興趣,第三遍認真看完,搞清楚全貌。
      /

      下面是加載流程的xmind導出圖,最好另存為到本地用看圖軟件看。看圖提示:

      1. 從上往下是根據堆棧倒置過來畫的流程“...表示省略IPC機制的代碼圖中有一些地方省略了Callback機制的代碼同一父節點表示在此父函數內按順序執行大部分類名和函數名已代表了其功能和意義,還可查看該類的頭文件注釋來幫助理解,或對照下面的”類間關系圖“。有些類在做具體開發時才有必要了解,所以不加解釋。流程中有幾個類都有同名函數doLoop,這些類都是把大流程分割成細小的操作,內部用表示操作步驟的emun狀態(圖中的case XXX分支)來跟蹤進行到哪一步,如此來實現異步並減小當次loop的處理時間。

        圖太大,分成兩段,點擊查看大圖:

        /

        /

      2.  
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved