android4.4 webview chromium是單進程的,圖中所有組件都運行在Browser進程中。
按從上而下的順序介紹這張圖中與顯示網頁相關的chromium核心結構。
1.AwContents->WebContentsImpl
AwContnents的建立過程如:
AwContents是WebView介面的主要實作類別。
native層的AwContents包含chromium核心browser組件中的類WebContents。
WebContents是chromium核心browser組件的入口。
我們看AwContents的java層和native層的結構。
ContentViewCZ喎?http://www.bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcmU6PGJyPgpqYXZhsuNBd0NvbnRlbnRzvatXZWJWaWV3tcS907/atffTw9eqvdO4+GphdmGy40NvbnRlbnRWaWV3Q29yZaGjbmF0aXZlsuM8YnI+CkNvbnRlbnRWaWV3Q29yZbD8uqxCcm93c2Vy1+m8/rXEyOu/2ldlYkNvbnRlbnRzSW1wbKGj1ebV/cq1z9ZXZWJWaWV3uabE3Dxicj4KtcTKx1dlYkNvbnRlbnRzSW1wbKGjPGJyPgpBd0NvbnRlbnRzQ2xpZW50Ojxicj4KQXdDb250ZW50c0NsaWVudLXEyrXP1sDgV2ViVmlld0NvbnRlbnRzQ2xpZW50QWRhcHRlcrD8uqzU2ldlYlZpZXdDaHJvbWl1bdbQo6w8YnI+CldlYlZpZXdDaHJvbWl1bcD708PV4rj2wOC908rVQXdDb250ZW50c7XEu9i196GjV2ViVmlld0NvbnRlbnRzQ2xpZW50QWRhcHRlcjxicj4Kt+LXsMHL06bTw7LjyrXP1rXEV2ViVmlld0NsaWVudLrNV2ViQ2hyb21lQ2xpZW50Ljxicj4KQXdDb250ZW50c0NsaWVudEJyaWRnZTo8YnI+Cs6qQXdDb250ZW50c0NsaWVudLSmwO1qc8/gudi1xGpuac2o0MWhozxicj4KQXdXZWJDb250ZW50c0RlbGVnYXRlOjxicj4KysdBd0NvbnRlbnRzQ2xpZW50vdO/2rXE0ruyv7fWo6zTw9PavdPK1VdlYkNvbnRlbnRzSW1wbMSjv+m1xLvYtfehozxicj4KQXdXZWJDb250ZW50c0RlbGVnYXRlvau+38zlyrXP1ra816q907j4QXdDb250ZW50c0NsaWVudKGjPGJyPgpXZWJDb250ZW50c0ltcGy0tL2ouf2zzMjnz8KjujwvcD4KPHA+PGltZyBzcmM9"http://www.2cto.com/uploadfile/Collfiles/20140609/20140609091213136.jpg" alt="\">
2.WebContentsImpl->Renderer host
RenderWidgetHostDelegate:
對RenderWidgetHost的狀態感興趣的類都會實現這個介面。用於接收RenderWidgetHost的狀態變化通知。
RenderViewHostDelegate:
對RenderViewHost的狀態感興趣的類都會實現這個介面。用於接收RenderViewHost的狀態變化通知。
RenderViewHostManager負責建立和管理WebContentsImpl中用到的RenderViewHosts。
WebContentsImpl的建構函式中建立了RenderViewHostManager執行個體,並將自身作為RenderWidgetHostDelegate
和RenderViewHostDelegate的執行個體傳給RenderViewHostManager。
RenderViewHostManager通過回調這兩個介面通知WebContentsImpl當前RenderWidgetHost和RenderViewHost
的狀態變化。
RenderViewHostImpl的建立過程如下。
RenderViewHostImpl與RenderViewImpl是一一對應的。
3.renderer host->renderer
renderer組件中RenderViewImpl是核心模組。
是應用程式層觸發的RenderViewImpl建立過程。
4.renderer->webkit glue
RenderViewImpl結構圖
WebKit::WebView的建立過程
RenderViewImpl::Create()調用RenderViewImpl的建構函式建立
RenderViewImpl的執行個體,之後調用RenderViewImpl::Initialize:
RenderViewImpl::Initialize(){
webwidget_ = WebView::create(this);
}
RenderWidget的執行個體建立是由下來函數觸發的:
RenderViewImpl::createPopupMenu(){
RenderWidget* widget =
RenderWidget::Create(routing_id_, popup_type, screen_info_);
return widget->webwidget();
}
RenderWidget::Create()只有這一個入口。
用來建立不同類型的快顯視窗。
5. webkit glue->WebKit
WebViewImpl的結構圖: