Android中清楚Cookie和WebView的缓存

本文介绍了如何在Android应用中清除缓存和Cookie的方法,包括清除WebView缓存、关闭使用缓存的方式及针对特定URL的Cookie操作技巧。


 

前几天在做facebook链接的时候,总是第一次成功,第二次失败,后来分析,是本地的缓存没有清空,看了facebook sdk的源码才发现,果然,要做一步清楚cookie的操作:

一、清除cookie

 public 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();
	}


 

 

Android应用中,WebView用于显示网页内容。随着用户浏览网页,WebView缓存大量的数据,包括网页资源、图片、CSSJavaScript文件等。为了优化应用性能节省存储空间,定期清理WebView缓存是一个常见的操作。以下是清理WebView缓存的步骤: 1. **清除缓存**: 使用`clearCache`方法可以清除WebView缓存数据。 2. **清除Cookie**: 使用`CookieManager`类可以清除WebViewCookie数据。 3. **清除表单数据**: 使用`clearFormData`方法可以清除WebView的表单数据。 4. **清除历史记录**: 使用`clearHistory`方法可以清除WebView的历史记录。 以下是一个示例代码,展示了如何清理WebView缓存: ```java import android.webkit.CookieManager; import android.webkit.WebView; import android.content.Context; public class WebViewCacheClearer { public static void clearWebViewCache(Context context, WebView webView) { // 清除WebView缓存 webView.clearCache(true); // 清除WebView Cookie CookieManager.getInstance().removeAllCookies(null); CookieManager.getInstance().flush(); // 清除WebView表单数据 webView.clearFormData(); // 清除WebView历史记录 webView.clearHistory(); // 清除缓存目录 deleteDirectory(context.getCacheDir()); } private static boolean deleteDirectory(File directory) { if(directory != null && directory.exists()){ String[] files = directory.list(); if(files != null){ for(String file : files){ boolean success = deleteDirectory(new File(directory, file)); if(!success){ return false; } } } } return directory.delete(); } } ``` 在这个示例中,`clearWebViewCache`方法首先调用了`clearCache`方法清除缓存,然后使用`CookieManager`清除Cookie数据,接着清除表单数据历史记录,最后通过`deleteDirectory`方法删除缓存目录。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值