在这种情况下,我需要使用这种方法对数百个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对象需要近一分钟。我无法理解这种重要的类为什么会这么慢。它将不得不在最近的范围存储更改中更加频繁地使用。
有人知道如何更快地完成此排序过程吗?
lastModified()
调用都涉及与ContentProvider
的IPC。DocumentFile
不缓存此类数据(部分原因是其可能会更改)。创建一个名为DocumentFileEntry
的类(或任何其他名称),该类保存DocumentFile
及其最后修改时间戳。构建一个“DocumentFileEntry
”列表,并使用lastModified()
的值填充最后修改的时间戳。然后,对DocumentFileEntry
列表进行排序,以便您可以从这些已缓存的时间戳中工作。 - CommonsWare