Android WebView缓存浅析

  • 先前修改了服务器web页面,应用中使用WebView来显示这些页面,但是修改web页面后无论怎么刷新,客户端上的页面始终显示修改前的旧页面。百思不得其解,先是怀疑服务器web有cache,就把web服务关闭了,发现还是显示旧页面,那么问题只能出在客户端了,经查看以下目录中有大量跟WebView相关内容

    /data/data/$package/cache/webviewCacheChromium
    /data/data/$package/cache/webviewCacheChromiumStaging
    /data/data/$package/database/webview.db
    /data/data/$package/database/webviewCookiesChromium.db
    /data/data/$package/database/webviewCookiesChromiumPrivate.db
    

    删除这些内容后,再次刷新就可以看到服务器修改的最新web页面了,这些内容就是WebView的cache机制在起作用,WebView的cache机制默认enable状态的。

  • cache mode如下,可以通过
    android.webkit.WebSettings来设置cache mode : setCacheMode,默认是LOAD_DEFAULT
    

    WebSettings webSettings= webView.getSettings();

    webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);


    /**
         * Default cache usage mode. If the navigation type doesn't impose any
         * specific behavior, use cached resources when they are available
         * and not expired, otherwise load resources from the network.
         * Use with {@link #setCacheMode}.
         */
        public static final int LOAD_DEFAULT = -1;
    
        /**
         * Normal cache usage mode. Use with {@link #setCacheMode}.
         *
         * @deprecated This value is obsolete, as from API level
         * {@link android.os.Build.VERSION_CODES#HONEYCOMB} and onwards it has the
         * same effect as {@link #LOAD_DEFAULT}.
         */
        @Deprecated
        public static final int LOAD_NORMAL = 0;
    
        /**
         * Use cached resources when they are available, even if they have expired.
         * Otherwise load resources from the network.
         * Use with {@link #setCacheMode}.
         */
        public static final int LOAD_CACHE_ELSE_NETWORK = 1;
    
        /**
         * Don't use the cache, load from the network.
         * Use with {@link #setCacheMode}.
         */
        public static final int LOAD_NO_CACHE = 2;
    
        /**
         * Don't use the network, load from the cache.
         * Use with {@link #setCacheMode}.
         */
        public static final int LOAD_CACHE_ONLY = 3;

  • WebView中有着两种缓存:网页数据缓存(存储打开过的页面及资源)、H5缓存(即AppCache)。
  • 清除缓存
    clearCache

  • 控制cache大小
    由于系统API支持,但是我们可以通过式:定时统计缓存大小、按时间顺序删除缓存。

    getCacheDir()+文件查找+文件时间比较进行删除
    
    
  • 所以至此我们知道,如果要开发应用的的cache功能,如果使用的是
    WebView来显示html,根本无需自己动手,WebView已经做好了,估计网易新闻的离线就是如此实现的,
    但是网易新闻经常有很多离线页面无法查看,估计是bug使然了。
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值