Я хочу создать что-то вроде «Приложение PDF Viewer». Приложение будет искать все * .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();
}
И это ОЧЕНЬ МЕДЛЕННО. Это занимает почти 30 секунд, когда в выбранной папке ~ 600 файлов. Чтобы доказать это, я выбрал каталог из External Storage (не вторичное хранилище), а затем попробовал два решения: DocumentFile и File. версия файла выглядит она:
File f = new File(Environment.getExternalStorageDirectory()+"/pdffiles");
for(File file: f.listFiles()){
String fileNameToDisplay = file.getName();
}
}
Вторая версия работает около 500x быстрее. При отображении всех файлов в представлении списка почти нет времени.
Почему DocumentFile так медленно?
'Почему DocumentFile так медленно?'. Неверный вопрос. Вы должны спросить: «Что я должен использовать вместо DocumentFile?». Ну только если вы хотите что-то быстрее ;-). – greenapps
ListFiles() DocumentFile уже медленнее, чем файл File. Но очень медленным является DocumentFile.getName(). Soooo slooow. – greenapps
Да, я должен был спросить, как это, но я не могу изменить его прямо сейчас :( – user2551317