
HarmonyOS原生应用占用空间管理
使用接口
接口 | 接口能力 |
storageStatistics.getCurrentBundleStats | 获取当前应用的存储空间大小 (包含缓存文件,安装文件等) |
statvfs.getFreeSize | 查询设备剩余可用空间 |
statvfs.getTotalSize | 获取设备总空间 (排除系统占用空间) |
场景一:计算应用缓存大小,并进行清理
1.可以通过storageStatistics.getCurrentBundleStats接口获取缓存大小。
应用的缓存文件因为级别和加密类型不同,会保存在以下目录中。例如:app级别,加密类型为el1的缓存会保存到/data/storage/el1/base/cache目录下。
/data/storage/el1/base/cache
/data/storage/el1/base/haps/entry/cache
/data/storage/el2/base/cache
/data/storage/el2/base/haps/entry/cache
这四个目录可以通过以下接口获取,其中el1与el2因为分区不同,需要切换加密等级才能获取到:
2.清除缓存,缓存会保存在上述四个文件夹中,可以递归删除
webview缓存(/data/storage/el2/base/cache/web/Cache)包含于在上述文件夹中,也可以调用WebviewController.removeCache单独清理web缓存。
场景二:对文件夹中图片进行展示,并选择性清理(这里只对图片做了筛选,同理,还可以加上视频等)
1.制定图片过滤规则,过滤出对应格式(例如:jpg,png)的图片。
2.将文件夹路径与listFile获取到的路径拼接起来,得到图片完整沙箱路径。
3.根据沙箱路径将图片转换为pixelmap。
4.将图片展示出来,并删除指定图片,释放空间。
(1)单张图片删除。
定义长按手势,可以通过长按图片拉起菜单,选择删除指定图片。
使用Grid将图片排列展示,并通过bindContextMenu给image组件绑定菜单,长按拉起删除选择框,并实时展示删除后剩余图片。
(2)一键删除所有图片。
点击一键删除后,会拉起一个弹窗确认,这里弹窗使用的promptAction.openCustomDialog。
当前弹窗组件返回的reason中,暂不支持按钮关闭,故需自行实现。
自定义一个变量,使用@Watch去监测,一旦变量发生改变则触发回调关闭弹窗。
常见问题
Q:为什么通过查询到设备总空间和设置中显示的不同?
A:statvfs.getTotalSizeSync获取到的是data分区大小,三方应用仅能查询到自己能够使用的空间大小,暂无查询手机总内存大小的接口。
Q:能够查询外卡空间大小吗?
A:暂不支持。
Q:为什么有些中文文件名的文件搜不到?
A:当前HarmonyOS文件系统仅支持utf-8格式,gbk格式的中文名的文件通过其它方式存入文件系统中,名称会乱码。
Q:为什么删除文件夹会报错:Directory not empty。
A:fs.rmdir是递归删除,会删除该文件夹以及子文件夹中的所有文件,但是当其子目录中有高权限的文件时,调用的接口无法删除此文件,导致无法删除此文件夹,报错:Directory not empty。
