android webview的缓存机制
2016-09-03 16:46
405 查看
在运行安卓程序时,报错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的获取:
Cookie的同步:
注意,此处代码需在在webview加载URL前设置,并且在调用后,不再设置webview的websetttings属性,否则会导致失效.
一般通过HttpClient,获取服务器的Cookie后再进行设置(比如一些登录的用户信息或者状态信息):
3、清除缓存
clearCache(boolean)
CacheManager.clear高版本中需要调用隐藏API。
清除Cookie:
或
如果只是需要删除和特定url关联的cookie,需要先进行移除后同步:
二、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”);
运行是/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); |
CookieSyncManager.createInstance(this); CookieSyncManager.getInstance().sync(); |
一般通过HttpClient,获取服务器的Cookie后再进行设置(比如一些登录的用户信息或者状态信息):
List<cookie> cookies = httpclient.getCookieStore().getCookies(); |
clearCache(boolean)
CacheManager.clear高版本中需要调用隐藏API。
清除Cookie:
1 | CookieManager.getInstance().removeSessionCookie(); |
1 | CookieManager.getInstance().removeAllCookies(); |
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(); } |
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的缓存机制
- Android:手把手教你构建 WebView 的缓存机制 & 资源预加载方案
- 手把手教你构建 Android WebView 的缓存机制 & 资源预加载方案
- Android:手把手教你构建 Android WebView 的缓存机制 & 资源预加载方案
- Android中WebView的缓存机制 & 资源预加载方案
- Android WebView缓存机制详解
- Android WebView缓存机制详解
- Android WebView缓存机制详解
- 手把手教你构建 Android WebView 的缓存机制 & 资源预加载方案
- Android WebView缓存机制详解
- android WebView缓存机制介绍
- 【专题】Android WebView缓存机制详解
- android webview缓存机制
- Android:手把手教你构建 WebView 的缓存机制 & 资源预加载方案
- Android WebView缓存机制详解