以android 4.2为例

1, android 4.2中 WebViewClassic.java 为 WebView.java的代理类.

2,程序运行后,浏览器首先加载webkit so.

    WebViewCore.java ,apk 运行后只加载一次.

    static {

      // Load libwebcore and libchromium_net during static initialization.

      // This happens in the zygote process so they will be shared read-only

      // across all app processes.

      try {

        System.loadLibrary("chromium_net");

        System.loadLibrary("webcore");

      } catch (UnsatisfiedLinkError e) {

    Log.e(LOGTAG, "Unable to load native support libraries.");

    }

3,loadLibary 后则会初始化对应的JNI.将framwork 层webkit与c++ 层关联对应起来.

  主要处理在 WebCoreJniOnLoad.cpp

static RegistrationMethod gWebCoreRegMethods[] = {

{ "JavaBridge", android::registerJavaBridge },

{ "WebFrame", android::registerWebFrame },

{ "WebViewCore", android::registerWebViewCore },

{ "WebHistory", android::registerWebHistory },

{ "WebIconDatabase", android::registerWebIconDatabase },

{ "WebSettingsClassic", android::registerWebSettings },

#if ENABLE(DATABASE)

{ "WebStorage", android::registerWebStorage },

#endif

{ "WebView", android::registerWebView },

{ "ViewStateSerializer", android::registerViewStateSerializer },

{ "GeolocationPermissions", android::registerGeolocationPermissions },

{ "MockGeolocation", android::registerMockGeolocation },

#if ENABLE(VIDEO)

{ "HTML5Audio", android::registerMediaPlayerAudio },

{ "HTML5VideoViewProxy", android::registerMediaPlayerVideo },

#endif

{ "DeviceMotionAndOrientationManager", android::registerDeviceMotionAndOrientationManager },

{ "CookieManager", android::registerCookieManager },

{ "CacheManager", android::registerCacheManager },

};

4.创建WebView:

    webview1
= (WebView) findViewById(R.id.WebView1);

    该行调用后,则会初始webkit
,java 及c++
层的关键类.

    下图是各重要的类,创建流程.

5,android 浏览器上实现式.

  android 手机浏览器,通过创建WebView.组织WebView 来实现的. 每打开一个窗口(一个Tab) 则创建一个webview.

即,android 浏览器存在多个webview.

  

最新文章

  1. quick-cocos2d-x 2.2.3 rc版本中 crypto.md5file() 的C++实现在ANDROID上有BUG
  2. guava学习--FutureFallback
  3. 给flash添加A链接
  4. oracle_exp_query_where_clause
  5. 发布新款博客皮肤SimpleMemory
  6. [SAP ABAP开发技术总结]预定义(内置)数据类型
  7. 14.Object-C--浅谈Foundation框架字符串NSString 与NSMutableString
  8. Linux下 config/configure/Configure、make 、make test/make check、sudo make install 的作用
  9. [转] socket异步编程--libevent的使用
  10. php 前台数据显示
  11. android 沉浸式状态栏的实现
  12. drupal错误: Maximum execution time of 240 seconds exceeded
  13. C#如何拦截 Webbrowser Control的响应内容
  14. Java9发布回顾Java 8的十大新特性
  15. 使用vue-cli3搭建一个项目
  16. CST2017 安装问题
  17. Tiny6410 裸机开发--裸机点亮LED
  18. mysql 下 计算 两点 经纬度 之间的距离(转)
  19. 前端 --- 1 HTML
  20. Python基础之二进制

热门文章

  1. vue插件——滚动监听 vue-scrollwatch
  2. 报表开发神器!DevExpress Reporting v19.1:WinForms平台新功能
  3. Create React App 安装less 报错
  4. js中for..of..和迭代器
  5. 【Wince-自定义控件】ImageButton 带图片、文字
  6. Linux系统挂载存储只读改成读写
  7. 学习shell(二)
  8. Ubuntu:系统信息查询
  9. jmeter下载安装
  10. linux修改ulimit参数