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

Sort array of DocumentFiles faster in Android

在这种情况下,我必须使用此方法对数百个 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 对象。我无法理解这种 vital class 这么慢。随着最近的范围存储更改,它将不得不更多地使用它。

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

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

您可以做的是:

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

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