1、NSURLRequestCachePolicy 指定缓存逻辑。URL加载系统提供了一个磁盘和内存混合的缓存,来响应网络请求。
2、NSURLRequestUseProtocolCachePolicy = 0 默认缓存策略
3、NSURLRequestReloadIgnoringLocalCacheData 不使用本地缓存数据
4、NSURLRequestReloadIgnoringLocalAndRemoteCacheData 直接加载源数据
5、NSURLRequestReturnCacheDataElseLoad 指定已存的缓存数据应该用来响应请求,不管它的生命时长和过期时间。
6、NSURLRequestReturnCacheDataDontLoad 指定已存的缓存数据用来满足请求,不管生命时长和过期时间。
也可以使用这个方法清除单个请求的缓存
之前遇到一种情况,app端加载服务器一个网页,js调用http接口没有传参数报错了,服务端更新之后安卓重新加载没有问题,iOS端一直加载都会报错,卸载重装之后就没问题了。
最后发现在沙盒的Caches目录中找到一个WebKit的文件夹,把这个文件夹删了也没问题
借鉴:
html开发变态的静态资源缓存与更新
iOS开发:解决UIWebView自动缓存导致页面不可刷新问题
iOS html5使用缓存并及时更新方案总结
一、清除cookiepublic static void clearCookies(Context context) {
// Edge case: an illegal state exception is thrown if an instance of
// CookieSyncManager has not be created. CookieSyncManager is normally
// created by a WebKit view, but this might happen if you start the
// app, restore saved state, and click logout before running a UI
// dialog in a WebView -- in which case the app crashes
@SuppressWarnings("unused")
CookieSyncManager cookieSyncMngr =
CookieSyncManager.createInstance(context)
CookieManager cookieManager = CookieManager.getInstance()
cookieManager.removeAllCookie()
}
这是facebook sdk的源码,我不知道第一句到底起了什么作用?
二、清除webview缓存,查看root过的手机data下的文件,会发现有这个东西:webview命名的东西
删除保存于手机上的缓存.
// 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
}
打开关闭使用缓存
//优先使用缓存:
WebView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK)
//不使用缓存:
WebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE)
在退出应用的时候加上如下代码
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")
发现这个问题,一个朋友在iteye上问的:
Android的CookieManager只提供了removeAllCookies方法,用来删除所有的cookie,有什么办法只删除和特定url关联的cookie呢?本来打算使用setCookie(url, value)将指定url关联的cookie设为空串,但试了一下发现这个方法只是在已有的基础上继续添加cookie,并不能重置已有的cookie。
有朋友给打答案:
/**
* 同步一下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()
}
/*** 清除WebView缓存
*/
public void clearWebViewCache() {
/**清理Webview缓存数据库,缓存文件由程序自动生成
* /data/data/package_name/database/webview.db
* /data/data/package_name/database/webviewCache.db
**/
try {
//因为他们都是文件,所以可以用io方式删除,具体方法可以自己写
deleteDatabase("webview.db")
deleteDatabase("webviewCache.db")
} catch (Exception e) {
e.printStackTrace()
}
//WebView 缓存文件
File webviewCacheDir = new File(APP_CACAHE_DIRNAME)
//删除webview 缓存目录
if (webviewCacheDir.exists()) {
//具体的方法自己写
deleteFile(webviewCacheDir)
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)