WebView中存在着两种缓存:网页数据缓存(存储打开过的页面及资源),H5缓存(即AppCache)。

将我们浏览过的网页url已经网页文件(css、图片、js等)保存到数据库表中

缓存模式(5种)

LOAD_CACHE_ONLY:  不使用网络,只读取本地缓存数据
LOAD_DEFAULT:  根据cache-control决定是否从网络上取数据。
LOAD_CACHE_NORMAL: API level 17中已经废弃, 从API level 11开始作用同LOAD_DEFAULT模式
LOAD_NO_CACHE: 不使用缓存,只从网络获取数据.
LOAD_CACHE_ELSE_NETWORK,只要本地有,无论是否过期,或者no-cache,都使用缓存中的数据。

如:www.taobao.com的cache-control为no-cache,在模式LOAD_DEFAULT下,无论如何都会从网络上取数据,如果没有网络,就会出现错误页面;在LOAD_CACHE_ELSE_NETWORK模式下,无论是否有网络,只要本地有缓存,都使用缓存。本地没有缓存时才从网络上获取。
www.360.com.cn的cache-control为max-age=60,在两种模式下都使用本地缓存数据。

总结:根据以上两种模式,建议缓存策略为,判断是否有网络,有的话,使用LOAD_DEFAULT,无网络时,使用LOAD_CACHE_ELSE_NETWORK。

效果图:

根据百度首页来测试的,有网的情况下加载,之后关闭网络并结束进程在打开一样可以看到先前看到过的网页,当点击没打开过的网页是则:

缓存的数据目录默认在:data/data/包名/app_webview/Cache/ 下:

public class MainActivity extends Activity {private WebView webView;private String url = "https://wap.baidu.com/";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();}public void initView() {webView = (WebView) findViewById(R.id.activity_webview);webView.requestFocus();webView.setHorizontalScrollBarEnabled(false);webView.setVerticalScrollBarEnabled(false);initWebView();}@SuppressWarnings("deprecation")@SuppressLint("SetJavaScriptEnabled")private void initWebView() {webView.getSettings().setJavaScriptEnabled(true);// 设置 缓存模式if (NetUtils.isNetworkAvailable(MainActivity.this)) {webView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);} else {webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);}// webView.getSettings().setBlockNetworkImage(true);// 把图片加载放在最后来加载渲染
        webView.getSettings().setRenderPriority(RenderPriority.HIGH);// 支持多窗口webView.getSettings().setSupportMultipleWindows(true);// 开启 DOM storage API 功能webView.getSettings().setDomStorageEnabled(true);// 开启 Application Caches 功能webView.getSettings().setAppCacheEnabled(true);onLoad();}@SuppressWarnings("deprecation")@SuppressLint("SetJavaScriptEnabled")public void onLoad() {try {webView.setWebViewClient(new WebViewClient() {@Overridepublic void onLoadResource(WebView view, String url) {Log.i("tag", "onLoadResource url=" + url); // 开始加载super.onLoadResource(view, url);}@Overridepublic boolean shouldOverrideUrlLoading(WebView webview,String url) {Log.i("tag", "intercept url=" + url);// 重写此方法表明点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边
                    webview.loadUrl(url);return true;}@Overridepublic void onPageFinished(WebView view, String url) {String title = view.getTitle(); // 得到网页标题
Log.e("tag", "onPageFinished WebView title=" + title);}@Overridepublic void onReceivedError(WebView view, int errorCode,String description, String failingUrl) {Toast.makeText(getApplicationContext(), "加载错误",Toast.LENGTH_LONG).show();}});webView.loadUrl(url);} catch (Exception e) {return;}}@Override// 设置回退// 覆盖Activity类的onKeyDown(int keyCoder,KeyEvent event)方法public boolean onKeyDown(int keyCode, KeyEvent event) {if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {webView.goBack(); // goBack()表示返回WebView的上一页面return true;} else {finish();}}/**** 防止WebView加载内存泄漏*/@Overrideprotected void onDestroy() {super.onDestroy();webView.removeAllViews();webView.destroy();}}

AndroidManifest.xml 中加权限

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>    

代码未完全给出,要源码直接下载即可

源码点击下载: https://github.com/DickyQie/android-webview

android--------WebView 实现缓存网页数据相关推荐

  1. android webview清理缓存

    android webview清理缓存 最近写了个Android项目 遇到了一个问题就是webview 的缓存问题 每次进入程序webview都用缓存.接下来说说这问题是如何解决的. 首先了解下缓存的 ...

  2. android内核网络缓存,Android WebView cache 缓存 腾讯X5内核在线视频播放

    [实例简介] Android WebView cache 缓存 腾讯X5内核在线视频播放 [实例截图] [核心代码] Terry007 └── Terry007 ├── AndroidManifest ...

  3. android WebView加载网页白屏问题优化处理

    android WebView加载网页白屏问题优化处理 问题描述: 使用webview加载Web界面时,会出现界面白屏的情况.http下通常问题不大,通常https白屏的可能性很大,而且通常没有任何报 ...

  4. android webView的缓存机制和资源预加载

    android 原生使用WebView嵌入H5页面 Hybrid开发 一.性能问题 android webview 里H5加载速度慢 网络流量大 1.H5页面加载速度慢 渲染速度慢 js解析效率 js ...

  5. Android WebView清除缓存,总有一个方法适合你

    一,缓存介绍 缓存分为:页面缓存和数据缓存 页面缓存: 指加载一个网页时的html.JS.CSS等页面或者资源数据. 数据缓存 : 数据缓存分为AppCache和DOM Storage两种. 一般清除 ...

  6. android WebView清除缓存

    当我们加载Html时候,会在我们data/应用package下生成database与cache两个文件夹,我们请求的Url记录是保存在webviewCache.db里,而url的内容是保存在webvi ...

  7. android webview 图片缓存,WebView 图片离线缓存(含图片)

    自打去年十一来到掘金,就想着有一点一定会做 WebView 离线缓存,作为一个阅读类 app,不敢想象在没有离线缓存的情况下是怎么撑了这么久的

  8. 安卓Webview缓存网页数据(无网络正常显示)

    热度 1已有 52 次阅读2016-8-26 17:53 |个人分类:常见问题|系统分类:移动开发 一.需求经历 最近的项目是一个原生 +webview 显示的 APP,一开始的时候,网站那边要求我们 ...

  9. android webview 监听js,Android webview与js的数据交互

    项目要用到Webview和js交互,查了查以前的项目感觉还是有必要整理下的. 简单描述下项目中用到的地方,比如说在web页需要用到登录的地方点击登录跳转到APP原生登录界面去登录,点击web页的拨打电 ...

最新文章

  1. 大数据技术:让看病更加靠谱!
  2. 性能超强悍 戴尔 R920服务器
  3. Bugku 杂项(三)
  4. 每日一笑 | 程序员的招租公告
  5. U-Boot-2009-03移植笔记(移植准备)
  6. 符合c语言语法规定的表达式,若变量定义为int fahr;,则5(fahr-32)/9是符合C语言语法的表达式...
  7. 计算机毕业设计的代码会查重吗,一般毕业论文会查重代码吗?
  8. 几个开源即时通讯聊天软件推荐-带源码地址
  9. php 将rgb转cmyk,应该如何正确的将RGB转成CMYK颜色? | 色彩管理网
  10. LaTex常用特殊符号对应表
  11. %1 不是有效的 Win32 应用程序
  12. 信用卡还款怎么分期,还款还是要技巧的
  13. 题目内容:你的程序要读入一个整数,范围是[-100000,100000]。然后,用汉语拼音将这个整数的每一位输出出来。如输入1234,则输出:yi er san si注意,每个字的拼音
  14. 计算机主机版最重要的部件,电脑配件中到底哪个最为重要
  15. linux视频拼接工具,linux中使用ffmpeg 无损剪切/拼接视频程序
  16. C# 开发ModBus的服务器程序 实现ModBus数据总站 搭建自定义的Modbus服务器 同时支持tcp和rtu...
  17. “飞象”已露国家级工业互联网平台之像
  18. 计算机电源接通 但未充电,笔记本电脑电源已接通却显示未充电怎么办?
  19. 《企业级ios应用开发实战》一2.4 搭建iOS开发环境
  20. 5种最常用的黑客工具,以及如何防御

热门文章

  1. [BUUCTF-pwn]——[BJDCTF 2nd]secret
  2. php 多个 csv 文件,php - 如何将CSV文件上传到多个数据库目录中? - SO中文参考 - www.soinside.com...
  3. 31.1 inforMATION_SCHEMA aCcess syntax
  4. apmserv mysql密码_apmserv中修改mysql的root与phpmyadmin密码方法介绍_PHP教程
  5. java多线程w3c_多线程
  6. Oracle中类似于isql或osql的命令行工具
  7. Vue.js安装使用教程
  8. .Net之美读书笔记17
  9. meta标签的使用方法(PC端)
  10. .net 如何设置和检索特性信息(attribute)