「查漏補缺,不斷鞏固」
1、清除緩存涉及到的方法
一般來說,比較常有且容易混淆的有下面這兩組:
- getCacheDir()與getFilesDir()
- getExternalCacheDir()與getExternalFilesDir()
先說短的:
getCacheDir()方法獲取的路徑是/data/data//cache
getFilesDir()方法獲取的路徑是/data/data//files
再說長的:
Android應用程序在運行過程中,一般是把數據保存在SDCard中的(如果有)。大部分應用的做法是在SD下創建一個文件夾,然后把數據保存在這個文件夾中。但是當該應用被卸載后,這些數據還留在原處,所以需要我們在進行卸載應用操作的同時,幫用戶清理掉這些(買賣不成仁義在)。而getExternalCacheDir()與getExternalCacheDir()方法可以拿到應用在SD卡中建立的緩存地址。
getExternalFilesDir()方法獲取的路徑是/SDCard/Android/data/你的應用包名/files目錄,一般用來放置需要長時間保存的數據。
getExternalCacheDir()方法獲取的路徑是/SDCard/Android/data/你的應用包名/cache目錄,一般用來放置臨時緩存數據
2、實際代碼
我們知道清除緩存一共分為兩部:
- 拿到緩存地址
- 執行清除操作
讓我們一個一個給出代碼:
拿到緩存地址
public String getDiskCacheDir(Context context) { String cachePath = null; // 判斷是否有SD卡 if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()) || !Environment.isExternalStorageRemovable()) { cachePath = context.getExternalCacheDir().getPath(); } else { cachePath = context.getCacheDir().getPath(); } return cachePath; }
執行清除操作
public static boolean deleteDir(File dir) { if (dir == null) return false; // 目錄不存在返回true if (!dir.exists()) return true; // 不是目錄返回false if (!dir.isDirectory()) return false; // 現在文件存在且是文件夾 File[] files = dir.listFiles(); if (files != null && files.length != 0) { for (File file : files) { if (file.isFile()) { if (!deleteFile(file)) return false; } else if (file.isDirectory()) { if (!deleteDir(file)) return false; } } } return dir.delete(); }
當然,這篇里的清除緩存只是一個初步淺層的清理。
版權聲明:本文為CSDN博主「黃元帥」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/Xiao_Spring/article/details/77145702
1、還是有許多疑問,這里只是區分並記住了這兩對方法。
2、公司項目里只清理了 File appCacheDir = context.getCacheDir(); // /data/data/app_package_name/cache // 《Android實現清理緩存功能》中清理了getCacheDir()和getExternalCacheDir()
3、對於存儲,這個官方文檔解釋的很好 --> 《數據和文件存儲概覽》
未完待續