HarmonyOS 鸿蒙Next 清除缓存清除不干净,求教

发布于 1周前 作者 caililin 来自 鸿蒙OS

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

3 回复

你代码写的其实没啥太大毛病,清理文件位置也是对的,清理了下面这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清除缓存清除不干净的问题,以下是一些可能的解决方案:

  1. 重启设备: 有时简单的重启可以清理掉一些顽固的缓存。尝试关闭设备,然后重新开启,查看缓存是否已被彻底清除。

  2. 使用系统清理工具: HarmonyOS系统自带了清理工具,可以在设置或系统工具中找到。使用该工具进行深度清理,选择清除缓存选项,确保所有应用的缓存都被处理。

  3. 卸载并重新安装应用: 如果某个特定应用的缓存难以清除,尝试卸载该应用,然后重新从官方渠道下载安装。这通常可以清除与该应用相关的所有缓存数据。

  4. 检查存储空间: 有时缓存问题可能与存储空间不足有关。确保设备有足够的存储空间,以便系统能够正常进行缓存管理。

  5. 恢复出厂设置: 如果上述方法都无效,可以考虑恢复出厂设置。但请注意,这将清除设备上的所有数据,因此请提前备份重要信息。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。在那里,你可以获得更专业的帮助和支持。

回到顶部