java,try { , File cacheDir = context.getCacheDir(); , if (cacheDir.isDirectory()) { , for (File file : cacheDir.listFiles()) { , deleteDir(file); , } , } ,} catch (Exception e) { , e.printStackTrace(); ,} ,private static boolean deleteDir(File dir) { , if (dir.isDirectory()) { , for (File file : dir.listFiles()) { , deleteDir(file); , } , } , return dir.delete(); ,} ,
“ ,此方法递归删除缓存目录下所有文件,需注意处理权限及
安卓应用的内部缓存存储在 /data/data/<包名>/cache
目录下,可通过以下方式清除:
// 获取缓存目录 File cacheDir = getCacheDir(); // 递归删除目录下所有文件 deleteDir(cacheDir); private void deleteDir(File dir) { if (dir != null && dir.isDirectory()) { for (File file : dir.listFiles()) { file.delete(); // 删除文件 } } }
在 AndroidManifest.xml
中声明 android:allowBackup="true"
,用户可在系统设置的「存储」-「缓存数据」中手动清理。
WebView的缓存独立于应用缓存,需单独处理:
方法 | 说明 |
---|---|
WebStorage.getInstance().deleteAllData() | 清除WebStorage(localStorage、sessionStorage) |
CookieManager.getInstance().removeAllCookies(null) | 清除Cookie |
WebView.clearCache(true) | 清除WebView缓存(需API ≥ 21) |
// 兼容低版本清除WebView缓存 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { WebStorage.getInstance().deleteAllData(); } CookieManager.getInstance().removeAllCookies(null); WebView.clearCache(true);
// 删除数据库文件(如SQLite) File dbDir = getDatabasePath("my_db_name"); if (dbDir != null) { dbDir.delete(); // 删除后会自动重建 }
SharedPreferences preferences = getSharedPreferences("my_prefs", MODE_PRIVATE); SharedPreferences.Editor editor = preferences.edit(); editor.clear(); // 清空所有数据 editor.apply();
外部缓存路径为 /storage/emulated/0/Android/data/<包名>/cache
,需申请 WRITE_EXTERNAL_STORAGE
权限:
File externalCacheDir = getExternalCacheDir(); if (externalCacheDir != null) { deleteDir(externalCacheDir); }
adb shell
命令检查缓存目录: adb shell ls /data/data/<包名>/cache
解答:
/data/data/<包名>/cache
,无需申请存储权限,随应用卸载自动清除。 /storage/emulated/0/Android/data/<包名>/cache
,需申请 WRITE_EXTERNAL_STORAGE
权限,可能被系统清理工具删除。解答:
在 Activity
的 onDestroy()
或全局回调中调用缓存清理方法:
@Override protected void onDestroy() { super.onDestroy(); // 清理内部缓存 deleteDir(getCacheDir()); // 清理WebView缓存(需判断API版本) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { WebView.clearCache(true); } }