我想创建类似“PDF查看器应用程序”的东西。应用程序将搜索用户选择的位置中的所有* .pdf文件。用户可以通过此功能选择这个文件夹:DocumentFile非常慢
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
startActivityForResult(intent, REQUEST_CODE);
然后我得到DocumentFile(文件夹):
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == getActivity().RESULT_OK && requestCode == REQUEST_CODE) {
Uri uriTree = data.getData();
DocumentFile documentFile = DocumentFile.fromTreeUri(getActivity(), uriTree);
//rest of code here
}
}
为什么我选择了选择文件夹的这种方法吗?因为我希望能够选择辅助存储(您知道,在Android> = 5.0中,您不能使用Java.io.file访问辅助存储)。
好了,我得到的文件夹中所有的* .pdf为DocumentFile。然后我打电话:
for(DocumentFile file: documentFile.listFiles()){
String fileNameToDisplay = file.getName();
}
这是很慢。当所选文件夹中有〜600个文件时,需要将近30秒。为了证明这一点,我选择了外部存储(不是辅助存储)的目录,然后尝试了两种解决方案:DocumentFile和File。 文件版本看起来像:
File f = new File(Environment.getExternalStorageDirectory()+"/pdffiles");
for(File file: f.listFiles()){
String fileNameToDisplay = file.getName();
}
}
第二个版本的作品约500倍的速度更快。几乎没有时间显示列表视图上的所有文件。为什么DocumentFile这么慢?
'为什么DocumentFile这么慢?'。错误的问题。你应该问'我应该用什么来代替DocumentFile?'。那么只有当你想要更快的东西;-)。 – greenapps
DocumentFile的listFiles()已经比文件的慢。但DocumentFile.getName()非常慢。 Soooo slooow。 – greenapps
是啊,我应该问这样的,但现在我不能改变它:( – user2551317