转载请注明出处   http://blog.csdn.net/typename/article/details/40302351 powered by miechal zhao

概览

Android WebView提供展示网页,也提供我们应用程序对网页加载的一些定制,比如我们为了减少网络数据可以设置当前加载的页面不能显示图片,如果是pc网址在pad上访问我们可以提供用户一种概览模式的浏览方式,可以提供放大网页字体等定制功能。Android 提供管理WebView的一些setting的类WebSettings,在WebView对象被创建时WebSettings对象也会被同时创建,并附有默认的settings值. WebSettings对象可以通过WebView.getSettings()获得。WebSettings的生命周期同WebView生命周期相同,如果WebView被destroy 则WebSettings应该被释放,否则如果使用WebSettings继续再操作的话, 会抛出异常IllegalStateException。
 

1.WebSettings API详解

调用WebSettings设置的所有函数是异步制定的,因此我们设置某个状态并不能马上生效。
  1. public synchronized void setLoadsImagesAutomatically(boolean flag)

设置当前webview是否需要加载图片,这个标记控制整个webview的状态,并且对所有的资源都采取这种策略。如果设置为false 那么访问的当前网址中的所以图片资源将不会被加载。默认值是true;

 
  1. public synchronized void setBlockNetworkImage (boolean flag)

当getLoadsImagesAutomatically返回true这个方法才有效, 默认值为:false;

 
  1. public void setCacheMode(int mode)

一个普通网页的加载cache会被检查,内容也会被重新校验,第一次访问网页时,会存储cache到本地,设置策略可以让网页加载方式发生变化,cache模式有如下几种:

LOAD_DEFAULT: 如果我们应用程序没有设置任何cachemode, 这个是默认的cache方式。 加载一张网页会检查是否有cache,如果有并且没有过期则使用本地cache,否则                                   从网络上获取。
LOAD_CACHE_ELSE_NETWORK: 使用cache资源,即使过期了也使用,如果没有cache才从网络上获取。
LOAD_NO_CACHE: 不使用cache 全部从网络上获取
LOAD_CACHE_ONLY:  只使用cache上的内容。
 
  1. public void setLoadWithOverviewMode(boolean overview)

概览模式的设置,默认指是false。

 
  1. public synchronized void setJavaScriptEnabled (boolean flag)

默认值是false.  如果我们网页需要javascript时,需要开启这个设置,否则网页加载不全。

2.WebSettings Webkit中的实现

    WebSeetings 的API在Android 系统各个版本变化不大只是增加API或者deprecate一些API,但其内部是实现在不同版本中确有些差异,目前主流android系统版本主要为Android 4.0以上,分析4.0以上各系统版本得出webseetings的实现分为三块Android 4.0, Android 4.1---4.3,Android 4.4。下面分析下Android 以上各版本间的实现:

1)Android 4.0系统 主要分为两部分,一部分是API层,另一部分Settings的存储位置。
    Settings存储位置大部分的setting最终设置到WebCore当中的Settings.cpp, 比如javaScriptEnable等
    还有一部分根据模块相关存储在模块内部,比如CacheMode存储在FrameLoader当中。
2)Android 4.1--4.3系统对WebView的 framework进行重构,WebSettings相应也跟着变化。
      中间引入了桥阶层WebSettingsClassc。
 Settings存储位置大部分的setting最终设置到WebCore当中的Settings.cpp, 比如javaScriptEnable等
   还有一部分跟平台相关的存储在WebCoreSupport层相应模块中,比如在4.1---4.3上CacheMode存储在WebRequestContext
 
在Android 4.4上WebView底层实现换成了chromium,为了兼容老的WebSettings的接口,Android 4.4做了chromium 的桥阶层,主要涉及的WebSettings相关代码在
ContentSettingsAdapter,AwSettings中。
和前面的一些版本相同的是大部分settings还是存储在Webkit的Settings.cpp中,这边简单介绍下chromium 使用的blink渲染引擎,而blink是从webkit当中剥离出来的,还保留了webkit的parsing等。因此和我们之前看到的Settings.cpp存储在WebCore目录,目录结构会有所不同。
还有一部分settings在Android 4.4上存储方式也是存储在platform porting层。 下面是一个关于cachemode这个设置的分析:
 
 
参考资料:
https://source.android.com/   Android 4.0---4.4

Android WebView 开发详解(三)的更多相关文章

  1. Android WebView 开发详解

    Android WebView 开发详解 参见 http://blog.csdn.net/typename/article/details/39030091

  2. Android WebView 开发详解(一)

    转载请注明出处  http://blog.csdn.net/typename/article/details/39030091 powered by meichal zhao 概览: Android ...

  3. Android WebView 开发详解(二)

    转载请注明出处  http://blog.csdn.net/typename/article/details/39495409 powered by miechal zhao   概览: Androi ...

  4. JMessage Android 端开发详解

    目前越来越多的应用会需要集成即时通讯功能,这里就为大家详细讲一下如何通过集成 JMessage 来为你的 App 增加即时通讯功能. 首先,一个最基础的 IM 应用会需要有哪些功能? 用户注册 / 登 ...

  5. Android USB 开发详解

    Android USB 开发详解 先附上 Android USB 官方文档 Android通过两种模式支持各种 USB 外设和 Android USB 附件(实现Android附件协议的硬件):USB ...

  6. 《Android游戏开发详解》一1.7 控制流程第1部分——if和else语句

    本节书摘来异步社区<Android游戏开发详解>一书中的第1章,第1.7节,译者: 李强 责编: 陈冀康,更多章节内容可以访问云栖社区"异步社区"公众号查看. 1.7 ...

  7. Android Studio 插件开发详解三:翻译插件实战

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/78113868 本文出自[赵彦军的博客] 一:概述 如果不了解插件开发基础的同学可以 ...

  8. Android Widget 开发详解(二) +支持listView滑动的widget

    转载请标明出处:http://blog.csdn.net/sk719887916/article/details/47027263 不少开发项目中都会有widget功能,别小瞧了它,他也是androi ...

  9. Android WebView 开发具体解释(三)

    转载请注明出处   http://blog.csdn.net/typename/article/details/40302351 powered by miechal zhao 概览 Android ...

随机推荐

  1. SQL Server调优系列进阶篇 - 深入剖析统计信息

    前言 经过前几篇的分析,其实大体已经初窥到SQL Server统计信息的重要性了,所以本篇就要祭出这个神器了. 该篇内容会很长,坐好板凳,瓜子零食之类... 不废话,进正题 技术准备 数据库版本为SQ ...

  2. 日志记录类LogHelper

    开源日志log4net使用起来很方便,但是项目中不让用,所以自己重写了一个类,用来记录日志,比较简单. 1.首先是可以把日志分成多个类型,分别记录到不同的文件中 /// <summary> ...

  3. .NET 4 新建 webform 项目编译不通过

    .NET 4 新建 webform 项目编译不通过,可能需要做如下改动. 一.根据编译错误,删除 packages.config 中相关包 二.安装包install-package Microsoft ...

  4. unity访问php

    长连接,弱联网.不好意思,这俩不是一个意思. 反过来说,短连接,强联网,是不是有点别扭呢. 你可以不会php,甚至你可以不知道php是干什么的. 百度php安装环境,自行搭建好环境,顺便测试一下.(下 ...

  5. 用pelican搭建完美博客

    前面有文章介绍本站采用了Python编写的Pelican静态生成博客系统, 之所以没有使用当前很火的Jekyll, 是因为它是Ruby编写, 而我又对Ruby没有啥兴趣, 所以还是选择了使用了我熟悉的 ...

  6. FreeMarker语法2

    FreeMarker的模板文件并不比HTML页面复杂多少,FreeMarker模板文件主要由如下4个部分组成: 1,文本:直接输出的部分 2,注释:<#-- ... -->格式部分,不会输 ...

  7. Harry Potter

    Names appearing in "Harry Potter" 1.Harry Potter ①Harry is from Henry. ②Harry is related t ...

  8. 学习C++ Primer 的个人理解(零)

    由于自己看书之后经常容易忘记细节,所以写在博客上让我自己的思路更加清晰一些. 我的博客仅仅只是将书中的内容概括一下,有一些不好理解的部分我会用我自己理解的方式使用大白话写出来. 仅此而已.

  9. OpenCV2学习笔记05:矩阵翻转

    对图像进行翻转或旋转可以使用cv::flip()函数,可以实现将一个二维矩阵沿X轴.Y轴或者同时沿XY轴翻转.函数原型如下: C++: void flip(InputArray src, Output ...

  10. Windows Linux HackMacintosh

    我想把Windows Linux HackMacintosh三类系统融入到一台笔记本上的神经病应该不多. 我的电脑就一个SATA硬盘,BIOS还不是EFI的.一共同时安装了Windows 8.1.Op ...