簡體   English   中英

如何每隔X分鍾清除一次應用緩存?

[英]How do I clear app cache every X minutes?

我有一個使用webview並利用緩存的應用程序。 但我需要每隔X分鍾清除一次緩存,即使該應用未運行也是如此。 我該怎么做?

我啟用了這樣的緩存:

        myWebView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
        myWebView.getSettings().setAppCacheEnabled(true);

我使用此語句在一個按鈕的幫助下刪除緩存:

myWebView.clearCache(true);

Gaunt Face發布的上述經過編輯的代碼段包含一個錯誤,即如果由於無法刪除其目錄之一而無法刪除目錄,則該代碼將無限循環地重試。 我將其重寫為真正的遞歸,並添加了numDays參數,以便您可以控制修剪的文件必須多大:

//helper method for clearCache() , recursive
//returns number of deleted files
static int clearCacheFolder(final File dir, final int numDays) {

int deletedFiles = 0;
if (dir!= null && dir.isDirectory()) {
    try {
        for (File child:dir.listFiles()) {

            //first delete subdirectories recursively
            if (child.isDirectory()) {
                deletedFiles += clearCacheFolder(child, numDays);
            }

            //then delete the files and subdirectories in this dir
            //only empty directories can be deleted, so subdirs have been done first
            if (child.lastModified() < new Date().getTime() - numDays * DateUtils.DAY_IN_MILLIS) {
                if (child.delete()) {
                    deletedFiles++;
                }
            }
        }
    }
    catch(Exception e) {
        Log.e(TAG, String.format("Failed to clean the cache, error %s", e.getMessage()));
    }
}
return deletedFiles;
}

/*
 * Delete the files older than numDays days from the application cache
 * 0 means all files.
 */
 public static void clearCache(final Context context, final int numDays) {
Log.i(TAG, String.format("Starting cache prune, deleting files older than %d days", numDays));
int numDeletedFiles = clearCacheFolder(context.getCacheDir(), numDays);
Log.i(TAG, String.format("Cache pruning completed, %d files deleted", numDeletedFiles));
}
 public static void deleteDirectoryTree(File fileOrDirectory) {
        if (fileOrDirectory.isDirectory()) {
            for (File child : fileOrDirectory.listFiles()) {
                deleteDirectoryTree(child);
            }
        }

        fileOrDirectory.delete();
    }


deleteDirectoryTree(this.getCacheDir());

您可以在“活動”中設置一個計時器,並在指定的超時后調用deleteDirectoryTree

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM