Android清除WebView緩存

1. 前言

用過WebView的同學都清楚,WebView默認是會自動緩存網頁資源的。雖然前端H5網頁有自己一套緩存機制(不懂的同學,可以看看這篇文章 手把手教你構建 Android WebView 的緩存機制 & 資源預加載方案),但是在某些場景下,還是需要原生主動去做清除緩存操作,即清除WebView的緩存。大多數文章都會說,使用下列的方法就可以清除了。

new WebView(context).clearCache(true);

但實際上是這種清除方式,只是清除了一部分緩存而已。像Cookie,使用這種方式是清除不了的。

2. 解決方案

經過自己的摸索,整理出了一個有效的清除方式,具體代碼如下:

/**
 * 清除緩存
 *
 * @param context 上下文
 */
public static void clearCache(Context context) {
    try {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { // 清除cookie
            CookieManager.getInstance().removeAllCookies(null);
        } else {
            CookieSyncManager.createInstance(context);
            CookieManager.getInstance().removeAllCookie();
            CookieSyncManager.getInstance().sync();
        }

        new WebView(context).clearCache(true);

        File cacheFile = new File(context.getCacheDir().getParent() + "/app_webview");
        clearCacheFolder(cacheFile, System.currentTimeMillis());
    } catch (Exception e) {
        e.printStackTrace();
    }
}

private static int clearCacheFolder(File dir, long time) {
    int deletedFiles = 0;
    if (dir != null && dir.isDirectory()) {
        try {
            for (File child : dir.listFiles()) {
                if (child.isDirectory()) {
                    deletedFiles += clearCacheFolder(child, time);
                }
                if (child.lastModified() < time) {
                    if (child.delete()) {
                        deletedFiles++;
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    return deletedFiles;
}

3. 驗證

  • 調用上面clearCache方法後,可以重新打開網頁,比較網頁加載的速度
  • 使用Android Studio的DeviceFileExplorer工具,進入到“/dada/data/APP的包名”目錄下,比較前後文件內容的變化,如下圖所示
清除緩存前
清除緩存後

 

完整的demo可以查看 AndroidWebView

 

如果想進一步交流和學習的同學,可以加一下QQ羣哦!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章