摘要
从应用程序层次来看,WebView只是一个视图(View)部件而已,与普通的TextView一样,它可以被嵌入在应用程序的任何一个位置,所以,尽管WebView是一个较为复杂的视图部件,但仍然工作在Android视图系统的绘制模型下。
绘制模型 vs. 渲染模型
事实上,绘制模型和渲染模型两个术语可以混用。但本文还是对两者做了细微的区分。当谈及与Android视图系统整合,使用“绘制模型”术语说明Android View系统的绘制模型是如何作用到WebView部件上,而谈及WebView内页面内容的合成方式时,使用“渲染模型”术语描述以何种方式将页面内容渲染到由绘制模型中给定的Canvas对象上。两者的联系是,渲染模型会根据绘制模型中的Canvas对象决定采取何种渲染方式。
WebView的绘制模型
Android SDK中,android.webkit.WebView实际上是一个ViewGroup,并将后端的具体实现抽象为WebViewProvider,而WebViewChromium正是一个提供基于Chromium的具体实现类,对核心类AwContents做了一层简单的封装,加强了对线程安全方面的考量。大致结构如下图所示:
简单的来说,当一个视图(View)部件的内容发生更新时,会调用invalidate()方法通知Android视图系统表明这个View的内容已经失效,视图系统会根据view层