Android中超过30000张图片的快速删除文件夹
Posted
技术标签:
【中文标题】Android中超过30000张图片的快速删除文件夹【英文标题】:Fast delete folder with more than 30000 images in Android 【发布时间】:2012-04-02 15:10:02 【问题描述】:我必须删除包含超过 30000 张图像的文件夹。 我里面有“.nomedia”文件,以防止一直扫描。 试图删除所有文件我必须检查每个文件的文件名。如果我错过了这个检查 - '.nomedia' 文件将被删除。如果这发生在图像之前 - 这将导致巨大的性能损失。 知道如何解决这个问题吗?
更新:
有没有人知道在不使用“.nomedia”的情况下隐藏图像的方法? 我可以保存带有假扩展名的文件,但我不确定这是否有效。
更新:
实际上测试向我展示了这个结果:检查名称使删除速度慢了大约 50%。问题不在于检查代码,而在于系统扫描文件夹:(
【问题讨论】:
"我里面有 '.nomedia' 文件以防止一直扫描。" - 什么是一直在扫描? android 设备上不应该有任何东西在不断扫描媒体文件夹。 我正在为地图缓存添加图像。当我拖动地图时 - 每次拖动大约 10-15。如果 android 扫描文件夹中的所有新图像 - 这是一场灾难。 @MisterSquonk:一些公司,比如三星和索尼,有系统应用程序可以扫描所有媒体文件夹,并在设备上存在的所有媒体上构建某种库。 @MisterSquonk 我的情况是一样的。我会尝试使用未知的文件扩展名。 你可以考虑运行"rm *"(不会删除java.lang.Process中以'.'开头的东西 【参考方案1】:您确定仅检查文件名的过程需要很长时间吗?
为了删除文件,我想你还是需要File
对象。已经有了File
对象,执行以下操作的性能成本是多少?
".nomedia".equals(file.getName());
实际删除 (file.delete()
) 的成本应该比字符串比较高出几个数量级。
您测量过检查文件名的实际时间吗?
【讨论】:
你是如何进行测试的? 30000 次字符串比较的累计时间是多少? 实际上测试向我展示了这个结果:检查名称会使删除速度慢约 50%。问题不在检查代码中,而是在系统扫描文件夹中:(【参考方案2】:我暂时的解决方案是:
-
用图像重命名文件夹。
为包含“.nomedia”文件的图像创建新文件夹。
启动后台线程以删除旧文件夹。
这种方式并不比以前更快,但允许用户立即继续工作。 当然有一个假设 - 用户必须知道删除和清理占用的空间暂时还没有完成。
【讨论】:
其实非常聪明的解决方案。要加快实际删除过程,请查看使用rm -rf
的答案:***.com/a/58420953/293280 我们发现它比使用FileUtils
快几倍。以上是关于Android中超过30000张图片的快速删除文件夹的主要内容,如果未能解决你的问题,请参考以下文章