android webview清理缓存
最近写了个Android项目 遇到了一个问题就是webview 的缓存问题 每次进入程序webview都用缓存。接下来说说这问题是如何解决的。
首先了解下缓存的分类
页面缓存:
加载一个网页时的html、JS、CSS等页面或者资源数据,这些缓存资源是由于浏览器的行为而产生,开发者只能通过
配置HTTP响应头影响浏览器的行为才能间接地影响到这些缓存数据。而缓存的索引放在:/data/data/<包名>/databases
对应的文件放在:
/data/data/package_name/cache/webviewCacheChromunm下
数据缓存:
分为AppCache和DOM Storage两种
AppCache:
我们能够有选择的缓冲web浏览器中所有的东西,从页面、图片到脚本、css等等。
尤其在涉及到应用于网站的多个页面上的CSS和JavaScript文件的时候非常有用。其大小目前通常是5M。
在Android上需要手动开启(setAppCacheEnabled),并设置路径(setAppCachePath)和容量
(setAppCacheMaxSize),而Android中使用ApplicationCache.db来保存AppCache数据!
DOM Storage:
存储一些简单的用key/value对即可解决的数据,根据作用范围的不同,有Session Storage和Local Storage两种,分别用于会话级别的存储(页面关闭即消失)和本地化存储(除非主动 删除,否则数据永远不会过期)在Android中可以手动开启DOMStorage(setDomStorageEnabled), 设置存储路径(setDatabasePath)Android中Webkit会为DOMStorage产生两个文件
(my_path/localstorage/http_blog.csdn.net_0.localstorage
和my_path/Databases.db)
在我们实际开发中也会出现其他情况。
清理缓存
我看了很多博客试了很多方法都没有成功,废话不多说,来看代码
public void deleteFile(File file) {
if (file.exists()) {
if (file.isFile()) {
file.delete();
} else if (file.isDirectory()) {
File files[] = file.listFiles();
for (int i = 0; i < files.length; i++) {
deleteFile(files[i]);
}
}
file.delete();
} else {
System.out.println("delete file no exists ");
}
}
调用deleteFile方法
File webviewCacheDir = new File(getActivity().getCacheDir().getParent()); //缓存路径
//删除webview 缓存目录
if(webviewCacheDir.exists()){
deleteFile(webviewCacheDir);
}
android.os.Process.killProcess(android.os.Process.myPid());
注意:
android.os.Process.killProcess(android.os.Process.myPid());
这句代码是杀死程序。为什么要加这句代码呢?原因是Local Storage缓存想要清除只清理缓存文件是远远不够的必须要杀死进程才可以。
希望对大家的开发有帮助