如何解决在Android中更快地排序DocumentFiles数组
在这种情况下,我必须使用此方法对数百个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对象。我无法理解这种至关重要的课程太慢了。近期范围内的存储更改将不得不使用它。
有人知道如何更快地完成此排序过程吗?
解决方法
DocumentFile
上的许多(也许是大多数)方法最终提出了ContentProvider
的请求。这样的要求并不便宜。 lastModified()
是这种方法。排序200个对象将导致数千个此类调用,这就是为什么要花费很长时间的原因。
您可以做的是:
- 为
DocumentFile
创建一个包装器,其中包含DocumentFile
以及lastModified()
的缓存副本 - 从
DocumentFile
个对象的列表中创建一个列表,以便每个lastModified()
进行一次DocumentFile
调用 - 使用
lastModified()
中缓存的Comparator
值对包装器列表进行排序
拨打200个lastModified()
电话不会很快,但是比拨打数千个电话要快。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。