gpt4 book ai didi

android - WebView:以编程方式清除 Service Worker 缓存

转载 作者:太空宇宙 更新时间:2023-11-03 12:27:07 25 4
gpt4 key购买 nike

为了让用户快速清除缓存,我使用了以下功能(基于 thisthis )附加到“清除缓存”按钮:

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 缓存.我收到一位用户的报告,要真正清除 Service Worker 的内容,他们必须手动清除以下文件夹的内容(在他们的 root 设备上):

/data/data/com.example.myapp/app_webview/Cache/

基于 this post我已尝试将以下行添加到我的 clearAppCache() 函数中:

WebStorage.getInstance().deleteAllData();

但这似乎仍然没有清除 service worker 缓存的效果。

有什么想法吗?是的,我知道可以使用 javascript 清除服务 worker 缓存(请参阅上面链接的帖子),但我想要一种直接从 Android 执行此操作的方法。

最佳答案

我现在找到了删除服务 worker 缓存的方法。我的数据目录位于:

/data/user/0/com.app.package

然后里面是:

/cache
/http
/org.chromium.android_webview
/WebView
/code_cache
/files
/shared_prefs
/app_webview
/webview_data.lock
/Web Data
/Web Data-journal
/metrics_guid
/Cookies
/Cookies-journal
/GPUCache
/Service Worker
/QuotaManager
/QuotaManager-journal
/databases
/app_textures
/app_download_internal
/databases
/shaders

请注意 app_webview 中存在一个 Service Worker 子目录,这是一个赠品。

因此,要清除 Service Worker 缓存,您似乎只需要删除该子目录即可:

File dataDir = context.getDataDir(); // or see https://stackoverflow.com/a/19630415/4070848 for older Android versions
File serviceWorkerDir = new File(dataDir.getPath() + "/app_webview/Service Worker/");
deleteDir(serviceWorkerDir); // function defined in original post

或者,更残酷的是,您似乎可以删除整个 app_webview 子文件夹及其中的所有内容:

File dataDir = context.getDataDir(); // or see https://stackoverflow.com/a/19630415/4070848 for older Android versions
File appWebViewDir = new File(dataDir.getPath() + "/app_webview/");
deleteDir(appWebViewDir); // function defined in original post

仍然让我感到困惑的是,尽管使用 webSettings.setAppCachePath(cachePath) 将 WebView 的缓存路径设置在缓存目录中(请参阅我的原始帖子),WebView 还是选择了使用 app_webview 进行 service worker 缓存。也许它使用缓存目录进行传统的 http 缓存,并选择自己的位置 (app_webview) 进行 service worker 缓存?但这似乎仍然不对。此外,如前所述,一位用户报告说 app_webview 中存在 Cache 子目录,并且他们在不支持服务 worker 的 KitKat (Android 4.4) 上...不确定为什么使用 app_webview/Cache 目录而不是(或除此之外)cache。我根本没有 app_webview/Cache

关于android - WebView:以编程方式清除 Service Worker 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47414581/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com