gpt4 book ai didi

android - 在 Android 中更快地对文档文件数组进行排序

转载 作者:行者123 更新时间:2023-12-05 00:04:25 26 4
gpt4 key购买 nike

在这种情况下,我必须使用此方法对数百个 DocumentFile 对象进行排序:

                DocumentFile[] files = documentFile.listFiles();
ArrayList<DocumentFile> docFiles = new ArrayList<DocumentFile>();

Arrays.sort(files, new Comparator() {
public int compare(Object o1, Object o2) {

if (((DocumentFile)o1).lastModified() < ((DocumentFile)o2).lastModified()) {
return -1;
} else if (((DocumentFile)o1).lastModified() > ((DocumentFile)o2).lastModified()) {
return +1;
} else {
return 0;
}
}

});

if (files != null) {
for (DocumentFile file : files) {

if (!docFiles.contains(file))
docFiles.add(file);



}

但是,这花费的时间太长,大约需要一分钟处理 200 个 DocumentFile 对象。我无法理解这种重要的类(class)如此缓慢。随着最近的范围存储更改,它将不得不更多地使用它。

有人知道如何更快地完成这个排序过程吗?

最佳答案

DocumentFile 上的许多(也许是大多数)方法最终都会发出对 ContentProvider 的请求。这样的要求并不便宜。而lastModified()就是这样一个方法。对 200 个对象进行排序将导致数千次此类调用,这就是需要很长时间的原因。

你可以做的是:

  • DocumentFile 创建一个包装器,其中包含 DocumentFile 以及 lastModified() 的缓存副本
  • 从您的 DocumentFile 对象列表中创建一个列表,这样您就可以为每个 DocumentFile 调用一次 lastModified()
  • 使用 Comparator 中缓存的 lastModified() 值对包装器列表进行排序

进行 200 次 lastModified() 调用不会很快,但比进行数千次这样的调用要快。

关于android - 在 Android 中更快地对文档文件数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63458839/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com