HarmonyOS鸿蒙Next中app清除缓存,清理后去查询,发现还有一部分缓存空间没有全部清除
HarmonyOS鸿蒙Next中app清除缓存,清理后去查询,发现还有一部分缓存空间没有全部清除
CacheUtil.ets
import { fileIo, storageStatistics } from "@kit.CoreFileKit";
// 获取应用缓存数据空间大小
export function getCacheSize() {
return new Promise<storageStatistics.BundleStats>(async (resolve, reject) => {
storageStatistics.getCurrentBundleStats()
.then((bundleStats: storageStatistics.BundleStats) => {
console.info('getCurrentBundleStats successfully:' + JSON.stringify(bundleStats))
console.info('appsize :' + bundleStats.appSize)
console.info('cacheSize :' + bundleStats.cacheSize)
console.info('dataSize :' + bundleStats.dataSize)
resolve(bundleStats)
}).catch((err: Error) => {
console.error('获取应用缓存空间失败-->', JSON.stringify(err))
reject(err)
})
})
}
// 清理缓存
export function clearCache(context: Context) {
let cacheDir = context.cacheDir;
console.info('cacheDir: ', cacheDir);
fileIo.listFiles(cacheDir).then((filenames) => {
for (let i = 0; i < filenames.length; i++) {
let dirPath = cacheDir + '/' + filenames[i];
console.log(dirPath);
// 判断是否为文件夹
let isDirectory: boolean = false;
try {
isDirectory = fileIo.statSync(dirPath).isDirectory();
} catch (e) {
console.error(JSON.stringify(e));
}
if (isDirectory) {
fileIo.rmdirSync(dirPath);
} else {
fileIo.unlink(dirPath).then(() => {
console.info('remove file succeed')
}).catch((err: Error) => {
console.error('remove file failed with error message: ' + err.message);
});
}
}
})
}
更多关于HarmonyOS鸿蒙Next中app清除缓存,清理后去查询,发现还有一部分缓存空间没有全部清除的实战教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于HarmonyOS鸿蒙Next中app清除缓存,清理后去查询,发现还有一部分缓存空间没有全部清除的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
这个缓存有坑,你清理的文件夹只是一部分的,其他的你没有清理到,你获取到的缓存空间还一定都是el2的,而且它这个缓存就没有隔离的说法,缓存目录大小能够影响到临时目录。
哈哈,
这是一个段落。
这是一些文本内容。
这是另一段文本内容。
无知。
在HarmonyOS Next中,应用清理缓存后残留部分数据可能由以下原因导致:
- 系统保护机制自动保留高频访问的缓存文件
- 应用沙箱机制隔离的运行时临时文件
- 应用标记为"重要数据"的缓存项(如登录状态)
- 分布式服务产生的跨设备同步数据缓存
可通过以下命令查看详细缓存构成:
adb shell du -h /data/data/<package>/cache
残留缓存不影响系统运行,属于HarmonyOS的设计特性。
在HarmonyOS Next中,清理缓存后仍有部分空间未被清除,这通常是由于以下几个原因:
-
系统缓存机制:部分缓存可能由系统自动管理,应用层无法直接清除。BundleStats中的cacheSize可能包含这部分系统管理的缓存。
-
异步删除延迟:unlink和rmdirSync操作是异步的,统计信息可能不会立即更新。建议在清理完成后延迟1-2秒再查询。
-
子目录处理:当前代码只处理一级目录,如果缓存是多级嵌套的,需要使用递归删除:
function deleteRecursive(path: string) {
if (fileIo.statSync(path).isDirectory()) {
let files = fileIo.listFileSync(path);
files.forEach(file => {
deleteRecursive(`${path}/${file}`);
});
fileIo.rmdirSync(path);
} else {
fileIo.unlinkSync(path);
}
}
- 特殊文件锁定:某些缓存文件可能被系统或其他进程锁定,导致无法删除。可以尝试使用try-catch捕获异常并记录。
建议在清理完成后调用storageStatistics.getCurrentBundleStats()前添加短暂延迟,并检查是否处理了所有嵌套目录。