Android WebView 缓存

本文详细介绍了Android WebView的两种缓存类型:页面缓存和数据缓存(包括AppCache和DOM Storage),以及如何控制和设置它们。同时,文章还探讨了WebView的5种缓存模式,如LOAD_NO_CACHE、LOAD_CACHE_ONLY等,并强调了如何在Android应用中进行缓存模式的设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一. 两种缓存类型:

  • 页面缓存:加载一个网页时的html、JS、CSS等页面或者资源数据,这些缓存资源是由于浏览器 的行为而产生,开发者只能通过配置HTTP响应头影响浏览器的行为才能间接地影响到这些缓存数据。 而缓存的索引放在:/data/data//databases 对应的文件放在:/data/data/package_name/cache/webviewCacheChromunm下
  • 数据缓存:分为AppCache和DOM Storage两种 我们开发者可以自行控制的就是这些缓存资源

AppCache:

       我们能够有选择的缓冲web浏览器中所有的东西,从页面、图片到脚本、css等等。 尤其在涉及到应用于网站的多个页面上的CSS和JavaScript文件的时候非常有用。其大小目前通常是5M。 在Android上需要手动开启(setAppCacheEnabled),并设置路径(setAppCachePath)和容量 (setAppCacheMaxSize),而Android中使用ApplicationCache.db来保存AppCache数据!

DOM Storage:

存储一些简单的用key/value对即可解决的数据,根据作用范围的不同,有Session Storage和Local Storage两种,分别用于会话级别的存储(页面关闭即消失)和本地化存储(除非主动 删除,否则数据永远不会过期)在Android中可以手动开启DOM Storage(setDomStorageEnabled), 设置存储路径(setDatabasePath)Android中Webkit会为DOMStorage产生两个文件(my_path/localstorage/http_blog.youkuaiyun.com_0.localstorage和my_path/Databases.db)


二、WebView的5种缓存模式:

LOAD_NO_CACHE: 不使用缓存,只从网络获取数据

LOAD_CACHE_ONLY:  不使用网络,只读取本地缓存数据

LOAD_DEFAULT:  根据cache-control决定是否从网络上取数据

LOAD_CACHE_NORMAL: API level 17中已经废弃, 从API level 11开始作用同LOAD_DEFAULT模式

LOAD_CACHE_ELSE_NETWORK,只要本地有,无论是否过期,或者no-cache,都使用缓存中的数据

三、WebView缓存模式的设置:

     	webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);//或其他模式 

根据需求缓存策略可为:判断是否有网络  有:使用LOAD_DEFAULT/LOAD_NO_CACHE

    无:使用LOAD_CACHE_ELSE_NETWORK

四、删除缓存数据:

	webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
	webView.clearCache(true);
	webView.clearHistory();
	webView.clearFormData();

/**
 * 清除WebView缓存  
 */
public void clearWebViewCache(){

    //清理Webview缓存数据库    
    try {
        deleteDatabase("webview.db");
        deleteDatabase("webviewCache.db");
    } catch (Exception e) {
        e.printStackTrace();
    }

    //WebView 缓存文件    
    File appCacheDir = new File(getFilesDir().getAbsolutePath()+APP_CACAHE_DIRNAME);
    Log.e(TAG, "appCacheDir path="+appCacheDir.getAbsolutePath());

    File webviewCacheDir = new File(getCacheDir().getAbsolutePath()+"/webviewCache");
    Log.e(TAG, "webviewCacheDir path="+webviewCacheDir.getAbsolutePath());

    //删除webview 缓存目录    
    if(webviewCacheDir.exists()){
        deleteFile(webviewCacheDir);
    }
    //删除webview 缓存 缓存目录    
    if(appCacheDir.exists()){
        deleteFile(appCacheDir);
    }
}    




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值