文章目录

前几天在项目开发中遇到一个很奇葩的问题,在应用中做了一个清除应用缓存功能,将缓存目录文件中所有的文件都删除,然后再重新初始化的时候,这个目录就不能创建文件和目录了。在红米手机和魅族手机上试了,都会出现这个问题,华为手机上却没有这个问题,我的MOTO手机上也有这个问题。

于是在命令行进入shell,然后cd到这个目录提示tmp-mksh: Device or resource busy错误。用手机中的文件管理器删除这个目录提示删除失败。最后把应用卸载了,然后再删除,又可以删除这个目录。

这就奇了怪了,到底是怎么回事?在这个目录用执行new File(path).mkdirs()方法时,返回false,创建目录失败。导致应用没有办法在这个目录创建缓存数据,导致整个应用都没有办法正常进行,如果处理这种失败情况,很多地方都得改。但有些地方是分裂式的,这一个地方失败,会影响其他N多地方。但是之前用这个功能都没有问题,只是近期出现了这个问题。

不行,得找出原因。于是把清除缓存目录下面的文件路径都用日志输出了一遍,结果突然发现一些个奇怪的文件–mmap文件。这些文件是在使用腾讯mars开源库中的xlog组件产生的内核映射文件,用来同步缓存日志,防止日志因为应用出现意外而丢失。按照xlog的官方demo中的使用方法,xlog的初始化和关闭都是在Application中。删除缓存目录下面的日志文件时并没有关闭xlogmmap文件直接被删除,所以才导致上面说的奇葩问题。

目测是原因找到了,于是在删除缓存时,日志目录下面的日志文件都不删除,最后问题解决。至于是什么原因导致删除mmap文件出现上面的问题就不得而知,但是感觉整个目录被锁死了,直到删除应用才释放,强制停止应用都不起作用。

文章目录