• 安卓使用WebView清除缓存


    原文: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:其实最好是把清除缓存的代码都封装到一个类,然后调用静态方法即可。 
    大家有类似问题的可以试试,有问题的小伙伴请留言哈~

  • 相关阅读:
    Jquery+Ajax+Bootstrap Paginator实现分页的拼接
    推荐一款在线工具-程序员的工具箱
    推荐一款在线工具-程序员的工具箱
    Jquery+Ajax+Bootstrap Paginator实现分页的拼接
    JSP 基础语法
    jsp九大内置对象及四个作用域
    jdk 版本不一致导致的错误
    java虚拟机内存模型
    java 内存简介
    B2C
  • 原文地址:https://www.cnblogs.com/tc310/p/8633140.html
Copyright © 2020-2023  润新知