转载请注明出处   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设置的全部函数是异步制定的。因此我们设置某个状态并不能立即生效。

public synchronized void setLoadsImagesAutomatically(boolean flag)

设置当前webview是否须要载入图片,这个标记控制整个webview的状态,而且对全部的资源都採取这样的策略。假设设置为false 那么訪问的当前网址中的所以图片资源将不会被载入。默认值是true。

public synchronized void setBlockNetworkImage (boolean flag)

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

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上的内容。
public void setLoadWithOverviewMode(boolean overview)

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

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 以上各版本号间的实现:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdHlwZW5hbWU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

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这个设置的分析:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdHlwZW5hbWU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

參考资料:
https://source.android.com/   Android 4.0---4.4

Android WebView 开发具体解释(三)的更多相关文章

  1. Android WebView 开发详解(三)

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

  2. android webview开发问题及优化汇总

    我们在native与网页相结合开发的过程中,难免会遇到关于WebView一些共通的问题.就我目前开发过程中遇到的问题以及最后得到的优化方案都将在这里列举出来.有些是老生常谈,有些则是个人摸索得出解决方 ...

  3. Android艺术开发探索第三章————View的事件体系(下)

    Android艺术开发探索第三章----View的事件体系(下) 在这里就能学习到很多,主要还是对View的事件分发做一个体系的了解 一.View的事件分发 上篇大致的说了一下View的基础知识和滑动 ...

  4. Android艺术开发探索第三章——View的事件体系(上)

    Android艺术开发探索第三章----View的事件体系(上) 我们继续来看这本书,因为有点长,所以又分了上下,你在本片中将学习到 View基础知识 什么是View View的位置参数 Motion ...

  5. Android WebView 开发详解

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

  6. Android WebView 开发详解(二)

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

  7. Android WebView 开发详解(一)

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

  8. Android TV开发总结(三)构建一个TV app的焦点控制及遇到的坑

    转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52835829 前言:上篇中,&l ...

  9. Android WebView 开发教程

    声明在先:必须在AndroidMainfest.xml 里面声明权限,否则在Java里面编写的所有WebView浏览网页的代码都无法正常使用 <uses-permission android:n ...

随机推荐

  1. HDU1009:FatMouse' Trade(初探贪心,wait)

    FatMouse prepared M pounds of cat food, ready to trade with the cats guarding the warehouse containi ...

  2. 51nod 最长公共子序列问题(动态规划)(LCS)(递归)

    最长公共子序列问题 输入 第1行:字符串A 第2行:字符串B (A,B的长度 <= 1000) 输出 输出最长的子序列,如果有多个,随意输出1个. 输入示例 abcicba abdkscab 输 ...

  3. Linux命令之kill

    kill [-s signal | -p] [ --] pid… kill –l [signal] 终止指定进程.命令kill将指定的信号发送到指定的进程或进程组.如果没有指定信号,则发送SIGTER ...

  4. Java高级架构师(一)第14节:新增和列表页面和分页tag

    <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding= ...

  5. Scala实战高手****第14课:Scala集合上的函数式编程实战及Spark源码鉴赏

    package com.dt.spark.scala.bascis object Functional_Itearal {   def main(args: Array[String]): Unit ...

  6. 关于GIT的一些注意点

    往空仓库提交代码之前先将文档区的_gitignore放到项目根目录然后改名成.gitignore然后git add .gitignore以上的目的是忽略一些不应该提交GIT的文件,多人编辑工程的时候不 ...

  7. Jquery radio选中

    radio选中$("input[name=test][value=34]").attr("checked",true);//value=34的radio被选中$ ...

  8. MediaInfo用来分析视频和音频文件的编码和内容信息的超好用工具

    转载:http://blog.csdn.net/ameyume/article/details/6718705 MediaInfo简介 MediaInfo 用来分析视频和音频文件的编码和内容信息. M ...

  9. zk watch机制及创建node机制

    Watch(监视) 当指定的znode或znode的子数据更改时,监视器会显示通知.你只能在 get 命令中设置watch. 语法 get /path [watch] 1 示例 get /FirstZ ...

  10. 【POI】对于POI无法处理超大xls等文件,官方解决方法【已解决】【多线程提升速率待定】

    本次使用POI处理xlsx文件,莫名的遇到了一个无法逾越的问题. 总共71个xlsx文件,单个文件最大达到50M以上,71个xls文件摆在那里就有3-4G的大小. 在起始处理的时候,发现原本适用于正常 ...