2

在这种情况下,我必须使用此方法对数百个 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);



                    }

但是,这花费的时间太长,大约需要 MINUTE 200 个 DocumentFile 对象。我无法理解这种生命课程如此缓慢。它必须更多地用于最近的范围存储更改。

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

4

1 回答 1

0

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

你可以做的是:

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

拨打200 个lastModified()电话不会很快,但会比拨打数千个电话要快。

于 2020-08-18T10:46:07.343 回答