原文:https://blog.csdn.net/liwei123liwei123/article/details/52624826

Android 清除WebView缓存 
最近项目中需要用WebView显示内容,需要使用JavaScript去交互,但是每次加载都加载到了缓存的数据,这里记录一下如何去清除WebView缓存。 
首先要了解一些概念。

WebView的缓存可以分为页面缓存和数据缓存:

1,页面缓存: >指加载一个网页时的html、JS、CSS等页面或者资源数据。 >这些缓存资源是由于浏览器的行为而产生,开发者只能通过配置HTTP响应头影响浏览器的行为才能间接地影响到这些缓存数据。 >缓存的索引存放在/data/data/package_name/databases下。 >文件存放在/data/data/package_name/cache/xxxwebviewcachexxx下。

2,数据缓存 : >数据缓存分为AppCache和DOM Storage两种。 >这些缓存资源是由开发者的直接行为而产生,所有的缓存数据都由开发者直接完全地掌控。 >Android中Webkit使用一个db文件来保存AppCache数据(my_path/ApplicationCache.db) >Android中Webkit会为DOM Storage产生两个文件(my_path/localstorage/http_h5.m.taobao.com_0.localstorage和my_path/localstorage/Databases.db)。

那既然了解了,怎么清除呢: 
以下是百度出来的答案:

1.webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); 2.context.deleteDatabase(“WebView.db”); 3.context.deleteDatabase(“WebViewCache.db”);
4.webView.clearCache(true);
6.webView.clearFormData();
7.getCacheDir().delete();
8.用File的delete方法删除缓存文件夹;

老实说,对我的问题,没多大用,还是那句话,有事请Google 
其实如果你只是想要每次用webView.loadUrl(url)加载新的页面显示,那么调用webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE)就可以实现了,并不需要去删除缓存文件什么的。 
但是我的项目中使用了JavaScript的交互,而JavaScript的加载是通过头文件去获取加载的,所以每次我去获取新的页面的时候,虽然页面是新的,但是头文件中的数据还是old的,所以每次加载到的js都是old的。那么如何去做呢? 
上面提到这个头文件是浏览器HTTP相应头去获取的,开发者只能间接的影响,并不能控制。 
所以单独的webView.clearCache(true)是不能成功的,还需要清除webView的Cookie才行。 
所以我最终的解决方法是在Activity的onDestroy()方法中添加如下代码:

@Override
protected void onDestroy() {
super.onDestroy();
//清空所有Cookie
CookieSyncManager.createInstance(QzmobileApp.getContext()); //Create a singleton CookieSyncManager within a context
CookieManager cookieManager = CookieManager.getInstance(); // the singleton CookieManager instance
cookieManager.removeAllCookie();// Removes all cookies.
CookieSyncManager.getInstance().sync(); // forces sync manager to sync now webView.setWebChromeClient(null);
webView.setWebViewClient(null);
webView.getSettings().setJavaScriptEnabled(false);
webView.clearCache(true);
}

CookieSyncManager已经@Deprecated,但是requires API level 21,所以…… 
PS:其实最好是把清除缓存的代码都封装到一个类,然后调用静态方法即可。 
大家有类似问题的可以试试,有问题的小伙伴请留言哈~

安卓使用WebView清除缓存的更多相关文章

  1. (转)webView清除缓存

    NSURLCache * cache = [NSURLCache sharedURLCache]; [cache removeAllCachedResponses]; [cache setDiskCa ...

  2. WebApp:如何让安卓的webview缓存webapp的html、js和图片等资源

    一.开发环境     客户端:安卓+webview(vuejs)     服务器端:tomcat 8.0 二.问题     使用安卓原生+web(基于webpack+vuejs)的方式开发了一个安卓应 ...

  3. WebView Cache 缓存清除

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

  4. ios 中清除webView的缓存

    在UIWebView下,可以使用 [[NSURLCache sharedURLCache] removeAllCachedResponses];//清除缓存 来实现清除缓存,但当替换使用WKWebVi ...

  5. 王立平--WebView的缓存机制

    WebView的缓存能够分为页面缓存和数据缓存. 1.   页面缓存是指载入一个网页时的html.JS.CSS等页面或者资源数据. 这些缓存资源是因为浏览器的行为而产生.开发人员仅仅能通过配置HTTP ...

  6. Android WebView的缓存方式分析

    WebView的缓存可以分为(1)页面缓存和(2)数据缓存. 页面缓存是指当WebView加载一个网页时的html.JS.CSS等页面或者资源数据.这些缓存资源是由于浏览器的行为而产生,开发者只能通过 ...

  7. 前端清除缓存方法(微信缓存引起的bug)

    bug1:在新版微信中,部门安卓机子(华为)出现window.location.href/window.location.reload....等方法来刷新本页面链接,发现页面没有被刷新,经过排查,发现 ...

  8. Nginx缓存配置之手动清除缓存

    访问我的博客 前言 前文介绍了利用 nginx 的 nginx_ngx_cache_purge 模块来实现缓存功能,并设置了缓存时间为一天. 但是如果前端修改了页面,比如首页,由于 Nginx 缓存的 ...

  9. android 清除缓存功能

    本应用数据清除管理器 DataCleanManager.java   是从网上摘的 忘了 名字了 对不住了 载入一个webview   产生缓存  众所周知的webview是产生缓存的主要原因之中的一 ...

随机推荐

  1. redis搭建集群并用TreeSoft管理

    前言:redis作为一款高效的NOSQL数据库已经深入贯彻和落实到我们的日常开发代码中,作为缓存.时间控制.数据仓库.队列等使用方法层出不穷,简直是开写代码.居家旅行之必备良药.曾经,我们的项目都是单 ...

  2. python创建多维列表

    By francis_hao    Mar 24,2018   "*"操作符可以用于列表,表示将列表内容重复n次.如下,   但是当列表内容是列表的时候就出问题了,如果我只是修改多 ...

  3. HDU3400 三分套三分

    题意 就是给你两条线段AB , CD ,一个人在AB以速度p跑,在CD上以q跑, 在其他地方跑速度是r.问你从A到D最少的时间. 三分AB ,然后再三分CD ,模板题目,这题卡精度 eps不能少 #i ...

  4. Linux常用网络工具:hping高级主机扫描

    之前介绍了主机扫描工具fping,可以参考我写的<Linux常用网络工具:fping主机扫描>. hping是一款更高级的主机扫描工具,它支持TCP/IP数据包构造.分析,在某些防火墙配置 ...

  5. plantuml使用教程【转】

    plantuml使用教程[转]   Table of Contents 前言 什么是PlantUML 在Emacs里配置PlantUML(参考:Run it from Emacs) 其他软件里的Pla ...

  6. ZOJ 3780 E - Paint the Grid Again 拓扑排序

    https://vjudge.net/problem/49919/origin 题意:给你n*n只出现O和X的字符阵.有两种操作,一种操作Ri将i行全变成X,一种操作Ci将i列全变成O,每个不同的操作 ...

  7. Android 菜单和上下文演示

    在Action添加个TextView控件(上下文演示用); package com.example.test; import android.app.Activity;import android.o ...

  8. .net core 集成 autofac.

    1. Install Install-Package Autofac Install-Package Autofac.Extensions.DependencyInjection 2.Startup ...

  9. 你知道吗?衡量 Web 性能的几个关键指标

    自网站诞生以来,响应速度/响应时间一直都是大家关心的话题,而速度慢乃是网站的一个杀手,正当大家以为四核和宽带能力的提升能够解决这些问题时,Wi-Fi和移动设备为热点移动互联网又悄然兴起. 在2006年 ...

  10. array_unique() 去重复

    array_unique() 定义和用法 array_unique() 函数移除数组中的重复的值,并返回结果数组. 当几个数组元素的值相等时,只保留第一个元素,其他的元素被删除. 返回的数组中键名不变 ...