android清除WebView使用的缓存的学习记录

因为实习的项目的需求,我需要清除项目中使用的WebView控件产生缓存

先连接上OTG线,开adb shell进行调试,进入data/data目录找到安装的程序的位置;

应用程序包的命名习惯的惯例是:域名.公司或组织名.程序

文件结构如下:

android清除WebView使用的缓存的学习记录_第1张图片

app_tbs:项目用到的腾讯TBS X5内核产生的文件

app_textures:似乎是和图形界面描绘有关的文件

app_webview:webview控件的文件夹

cacahe:缓存数据的文件夹

databases:保存数据的文件夹

files:长时间保存的数据的文件夹

lib:里面存放有后缀名为.so的文件,应该是依赖的库里面带有的;

shared_prefs:应该是存放SharedPreference的目录;

基于这样的文件结构,可以肯定需要删除的是cache文件夹的内容和databases文件夹里面的内容,而app_webview则不敢肯定;

android清除WebView使用的缓存的学习记录_第2张图片

以上就是app_webview内的内容,比较明显的第一反应看到比较熟悉的是Cookies文件夹和GPUCache

根据网上老哥们的说法,Cookies是sqlite,而Cookies-journal则是sqlite的缓存;

这两者应该是不需要清理的;

项目中用到WebView控件,在加载html页面时,会在应用目录下生成database和cache文件夹;

请求的url记录则保存在WebViewCache.db,而url的内容则保存在WebViewCache文件夹下

那么根据以上条件,先决定进行对cache文件夹和databases文件夹下的webview.db和webviewCache.db进行清理

 首先使用了文件删除的办法清理缓存;

public class DataCleanManager {
	private static DataOutputStream dos = null;
	private static Process p = null;
	
	/**
	 * 保留函数
	 * 运行root权限下的命令
	 * @param cmd 命令
	 */
	private static void runRootCmd(String cmd){
		try {
			p = Runtime.getRuntime().exec("su");
			dos = new DataOutputStream(p.getOutputStream());
			dos.writeBytes(cmd + "\n");
			dos.flush();
			dos.close();
			p.destroy();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			if(dos != null){
				try{
					dos.close();
				}catch (IOException e) { e.printStackTrace(); }
			}
		}
	}
	
	/**
	 * 删除输入参数目录下的文件 
	 * @param directory 文件目录
	 */
	private static void deleteFileByDirectory(File directory){
		if(directory != null && directory.exists() && directory.isDirectory()){
			for(File file : directory.listFiles() )
				file.delete();
		}
	}
	
	/**
	 * 删除目录下的指定文件名的文件
	 * @param directory 文件目录
	 * @param filename 文件名
	 */
	private static void deleteFileByDirectory(File directory, String filename){
		if(directory != null && directory.exists() && directory.isDirectory()){
			for(File file : directory.listFiles()){
				if(file.toString().equals(filename))
					file.delete();
			}
		}
	}
	
	/**
	 * 清除缓存文件
	 * @param context
	 */
	private void cleanInternalCache(Context context){
		deleteFileByDirectory(context.getCacheDir());
	}
	
	/**
	 * 清除database文件夹下的webview.db和 webviewCache.db
	 * @param context
	 */
	private void cleanDatabases(Context context){
		String dataBasesFilePath = "/data/data" + context.getPackageName() + "/databases";
		deleteFileByDirectory(new File(dataBasesFilePath), "webview.db");
		deleteFileByDirectory(new File(dataBasesFilePath), "webviewCache.db");
	}
	
	/**
	 * 清除webView相关的缓存
	 * @param context
	 */
	public void cleanCache(Context context){
		cleanInternalCache(context);
		cleanDatabases(context);
	}
	
}
 在项目的实际应用中好像有比较多的问题,删除了文件之后会导致项目不稳定;

然后参考了一篇比较好的博文:http://blog.csdn.net/liwei123liwei123/article/details/52624826;

 引用了一下上面那篇博文,再记录一下要点:

1. WebView缓存分为两部分:

 1.1页面缓存,加载一个网页时的html,css,JS的页面资源,这部分缓存是因为浏览器行为而产生的,开发者只能通过

配置HTTP响应头影响浏览器行为才能间接影响这些数据;

->>这部分缓存的索引存放在/data/data/package_name/databases文件夹下

->>这部分缓存的文件存放在/data/data/package_name/cache/XXXwebviewcacheXXX下

1.2数据缓存,数据缓存分为AppCache和DOM Storage两种,这些缓存资源是由开发者的直接行为产生的;

Android中的Webkit使用一个db文件来保存AppCache数据(my_path/ApplicationCache.db)

Android的Webkit会为DOM Storage产生两个文件(my_path/localstorage/网页 和 my_path/localstorage/Databases.db)

你可能感兴趣的:(android清除WebView使用的缓存的学习记录)