HarmonyOS 鸿蒙Next 清除缓存清除不干净,求教
HarmonyOS 鸿蒙Next 清除缓存清除不干净,求教
getCache() {
storageStatistics.getCurrentBundleStats().then((BundleStats: storageStatistics.BundleStats) => {
// 将 cacheSize 转换为 MB 单位
const cacheSizeInMB = (BundleStats.cacheSize / (1024 * 1024)).toFixed(2); // 保留两位小数
this.cache = cacheSizeInMB + 'M'
console.info("getCurrentBundleStats successfully:" + JSON.stringify(BundleStats));
console.info("cacheSize in MB: " + cacheSizeInMB + " M");
}).catch((err: BusinessError) => {
console.error("getCurrentBundleStats failed with error:" + JSON.stringify(err));
});
}
// 清理缓存
clearCache(filepath: string) {
fileIo.listFiles(filepath).then((filenames) => {
for (let i = 0; i < filenames.length; i++) {
let dirPath = filepath + '/' + filenames[i];
console.log('dirPath', 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);
});
}
}
})
}
// 获取缓存路径(删除的路径为以下路径)
getPath() {
// 获取原始密级
let area = this.context.area;
console.log('area', area)
let appArea = this.context.getApplicationContext().area
console.log('appArea', appArea)
// 暂时替换密级
this.context.area = contextConstant.AreaMode.EL2;
this.context.getApplicationContext().area = 1
let cacheDir01 = ''
let cacheDir02 = getContext(this).cacheDir
if (this.context.area === contextConstant.AreaMode.EL2) {
cacheDir01 = cacheDir02.replace('el2', 'el1')
} else if (this.context.area === contextConstant.AreaMode.EL1) {
cacheDir01 = cacheDir02.replace('el1', 'el2')
}
console.log('cacheDir01', cacheDir01)
console.log('cacheDir02', cacheDir02)
let applicationContext = this.context.getApplicationContext(); // 获取应用上下文
let cacheDirEL1 = ''
let cacheDirEL2 = applicationContext.cacheDir;
if (applicationContext.area === 1) { // 沙箱路径为1代表el2,0代表el1
cacheDirEL1 = cacheDirEL2.replace('el2', 'el1')
} else if (applicationContext.area === 0) {
cacheDirEL1 = cacheDirEL2.replace('el1', 'el2')
}
console.log('cacheDirEL1', cacheDirEL1)
console.log('cacheDirEL2', cacheDirEL2)
// 还原密级
this.context.area = area;
this.context.getApplicationContext().area = appArea
fileIo.access(cacheDir01, (err: BusinessError, res: boolean) => {
if (err) {
console.error("access failed with error message: " + err.message + ", error code: " + err.code);
} else {
if (res) {
this.clearCache(cacheDir01)
} else {
console.info('cacheDir01', 'file not exists');
}
}
});
fileIo.access(cacheDir02, (err: BusinessError, res: boolean) => {
if (err) {
console.error("access failed with error message: " + err.message + ", error code: " + err.code);
} else {
if (res) {
this.clearCache(cacheDir02)
} else {
console.info('cacheDir02', "file not exists");
}
}
});
fileIo.access(cacheDirEL1, (err: BusinessError, res: boolean) => {
if (err) {
console.error("access failed with error message: " + err.message + ", error code: " + err.code);
} else {
if (res) {
this.clearCache(cacheDirEL1)
} else {
console.info('cacheDirEL1', "file not exists");
}
}
});
fileIo.access(cacheDirEL2, (err: BusinessError, res: boolean) => {
if (err) {
console.error("access failed with error message: " + err.message + ", error code: " + err.code);
} else {
if (res) {
this.clearCache(cacheDirEL2)
} else {
console.info('cacheDirEL2', "file not exists");
}
}
});
this.getCache()
promptAction.showToast({
message: '清除缓存成功',
duration: 2000,
})
}
更多关于HarmonyOS 鸿蒙Next 清除缓存清除不干净,求教的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
你代码写的其实没啥太大毛病,清理文件位置也是对的,清理了下面这4个文件
/data/storage/el1/base/cache
/data/storage/el1/base/haps/entry/cache
/data/storage/el2/base/cache
/data/storage/el2/base/haps/entry/cache
但是,你执行你的代码,看大日志顺序可以看到,虽然你this.getCache()
放在代码最下面,但是清楚缓存是异步的,先打印了getCache值,再开始清理缓存,所以你觉得清理缓存没生效。
将fileIo.access
这里改成同步的就可以了
更多关于HarmonyOS 鸿蒙Next 清除缓存清除不干净,求教的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
实际上,缓存存在于四个文件夹中,需要清理以下四个文件夹:
- /data/storage/el1/base/cache
- /data/storage/el1/base/haps/entry/cache
- /data/storage/el2/base/cache
- /data/storage/el2/base/haps/entry/cache
这篇文章可以帮到你: https://developer.huawei.com/consumer/cn/doc/architecture-guides/develop-data-1-0000002105256853
针对HarmonyOS 鸿蒙Next清除缓存清除不干净的问题,以下是一些可能的解决方案:
-
重启设备: 有时简单的重启可以清理掉一些顽固的缓存。尝试关闭设备,然后重新开启,查看缓存是否已被彻底清除。
-
使用系统清理工具: HarmonyOS系统自带了清理工具,可以在设置或系统工具中找到。使用该工具进行深度清理,选择清除缓存选项,确保所有应用的缓存都被处理。
-
卸载并重新安装应用: 如果某个特定应用的缓存难以清除,尝试卸载该应用,然后重新从官方渠道下载安装。这通常可以清除与该应用相关的所有缓存数据。
-
检查存储空间: 有时缓存问题可能与存储空间不足有关。确保设备有足够的存储空间,以便系统能够正常进行缓存管理。
-
恢复出厂设置: 如果上述方法都无效,可以考虑恢复出厂设置。但请注意,这将清除设备上的所有数据,因此请提前备份重要信息。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。在那里,你可以获得更专业的帮助和支持。