android webview的缓存机制
来源:互联网 发布:linux下安装redmine 编辑:程序博客网 时间:2024/06/05 03:06
在运行安卓程序时,报错DatabaseObjectNotClosedException
运行是/data/data/package/databases/webview.db没关掉db
大概是跟webview的缓存有关?cache还是cookie?
于是研究了一下webview的缓存
webview缓存策略:
//优先使用缓存:
WebView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
//不使用缓存:
WebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
缓存策略为,判断是否有网络,有的话,使用LOAD_DEFAULT,无网络时,使用LOAD_CACHE_ELSE_NETWORK
2
让我们看一下如何将Cookie和WebView进行结合:
Cooki的获取:
1
2
CookieManager cm = CookieManager.getInstance();
String Cookiestr = cm.getCookie(url);
Cookie的同步:
CookieSyncManager.createInstance(this);
CookieSyncManager.getInstance().sync();
注意,此处代码需在在webview加载URL前设置,并且在调用后,不再设置webview的websetttings属性,否则会导致失效.
一般通过HttpClient,获取服务器的Cookie后再进行设置(比如一些登录的用户信息或者状态信息):
List<cookie> cookies = httpclient.getCookieStore().getCookies();
3、清除缓存
clearCache(boolean)
CacheManager.clear高版本中需要调用隐藏API。
清除Cookie:
1
CookieManager.getInstance().removeSessionCookie();
或
1
CookieManager.getInstance().removeAllCookies();
如果只是需要删除和特定url关联的cookie,需要先进行移除后同步:
1
2
3
4
5
6
7
8
9
10
11
/**
* 同步一下cookie
*/
public static void synCookies(Context context, String url) {
CookieSyncManager.createInstance(context);
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
cookieManager.removeSessionCookie();//移除
cookieManager.setCookie(url, cookies);//指定要修改的cookies
CookieSyncManager.getInstance().sync();
}
二、H5缓存
1、缓存构成
根据setAppCachePath(String appCachePath)提供的路径,在H5使用缓存过程中生成的缓存文件。
2、缓存模式
无模式选择,通过setAppCacheEnabled(boolean flag)设置是否打开。默认关闭,即,H5的缓存无法使用。
3、清除缓存
找到调用setAppCachePath(String appCachePath)设置缓存的路径,把它下面的文件全部删除就OK了。
4删除缓存
// clear the cache before time numDays
private int clearCacheFolder(File dir, long numDays) {
int deletedFiles = 0;
if (dir!= null && dir.isDirectory()) {
try {
for (File child:dir.listFiles()) {
if (child.isDirectory()) {
deletedFiles += clearCacheFolder(child, numDays);
}
if (child.lastModified() < numDays) {
if (child.delete()) {
deletedFiles++;
}
}
}
} catch(Exception e) {
e.printStackTrace();
}
}
return deletedFiles;
}
6 退出应用的时候 :
File file = CacheManager.getCacheFileBaseDir();
if (file != null && file.exists() && file.isDirectory()) {
for (File item : file.listFiles()) {
item.delete();
}
file.delete();
}
context.deleteDatabase("webview.db");
context.deleteDatabase("webviewCache.db”);
- android webview的缓存机制
- android webview的缓存机制
- Android WebView 的缓存机制
- Android webView缓存机制
- Android WebView缓存机制
- Android WebView缓存机制
- webview的缓存机制
- Android WebView缓存机制详解
- Android WebView缓存机制详解
- Android WebView缓存机制详解
- Android WebView缓存机制详解
- Android WebView缓存机制详解
- Android WebView缓存机制详解
- android WebView缓存机制介绍
- Android WebView缓存机制详解
- Android WebView缓存机制详解
- Android WebView缓存机制详解
- 王立平--WebView的缓存机制
- Android Studio调试功能使用总结
- struts2 参数的接收
- Mac下配置jdk路径和多个jdk版本切换
- 最优化学习笔记(十)——对偶线性规划
- springMVC与Struts2的区别
- android webview的缓存机制
- 【NOIP2012模拟10.25】旅行
- oracle11g手工建库需要注意的点
- eclipse安装+java环境配置
- JavaWeb请求与响应(一)
- 配置无线路由器桥接
- SVN的安装使用
- Redis,Memcache的区别
- 漫步微积分三十五——弧长