【发布时间】:2017-11-21 13:41:49
【问题描述】:
为了给用户提供一种快速清除缓存的方法,我使用了以下附加到清除缓存按钮的函数(基于this 和this):
static void clearAppCache(Context context) {
try {
File dir = context.getCacheDir();
deleteDir(dir);
} catch (Exception e) {
// TODO: handle exception
}
}
private static boolean deleteDir(File dir) {
if (dir != null && dir.isDirectory()) {
String[] children = dir.list();
for (String aChildren : children) {
boolean success = deleteDir(new File(dir, aChildren));
if (!success) {
return false;
}
}
return dir.delete();
} else if (dir!= null && dir.isFile()) {
return dir.delete();
} else {
return false;
}
}
我也在用相同的缓存路径设置我的 WebView,如下:
WebSettings webSettings = mWebView.getSettings();
webSettings.setAppCacheEnabled(true);
String cachePath = getApplicationContext().getCacheDir().getAbsolutePath();
webSettings.setAppCachePath(cachePath);
我的理论是调用clearAppCache() 也会清除 WebView 的缓存,因为它所做的只是清除我为 WebView 设置的同一个缓存文件夹。
但由于我的 WebView 现在正在加载一个使用 service worker 的页面,我发现这似乎并没有清除 service worker 缓存.我收到一位用户的报告,要真正清除服务人员的东西,他们必须手动清除以下文件夹的内容(在他们的根设备上):
/data/data/com.example.myapp/app_webview/Cache/
基于this post,我尝试将以下行添加到我的clearAppCache() 函数中:
WebStorage.getInstance().deleteAllData();
但这似乎仍然没有清除服务工作者缓存的效果。
有什么想法吗?是的,我知道可以使用 javascript 清除 service worker 缓存(请参阅上面链接的帖子),但我想要一种直接从 Android 执行此操作的方法。
【问题讨论】:
标签: android caching webview service-worker