android webview清理缓存

本文讲述了在Android项目中遇到WebView缓存问题的解决方案,详细解析了页面缓存和数据缓存的类型,并提供了清理缓存的代码示例,特别指出清理Local Storage缓存时需要杀死进程的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.youkuaiyun.com_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缓存想要清除只清理缓存文件是远远不够的必须要杀死进程才可以。
希望对大家的开发用帮助

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值