Я пытаюсь получить список всех папок, содержащих файлы MP3 во внутреннем хранилище пользователя.Как ускорить доступ к хранилищу файлов?
Вот рекурсивная функция, что я призываю к этой цели -
public void listAllMusicFiles(String pathToDirectory) {
String lastFolderPath = "";
int mp3Count = 0;
File f = new File(pathToDirectory);
File[] files = f.listFiles();
for (File inFile : files) {
if (inFile.isDirectory()) {
//reset last folder path
lastFolderPath = "";
Log.d("Directory ", inFile.getPath());
listAllMusicFiles(inFile.getPath());
} else {
if (inFile.getAbsolutePath().endsWith(".mp3") || inFile.getAbsolutePath().endsWith(".MP3")) {
mp3Count++;
Log.wtf("MP3 Count", mp3Count + " ");
//add each folder only once
String folderName = inFile.getParentFile().getName();
String folderPath = inFile.getParentFile().getPath();
Log.e("FOUND in", folderPath);
//create a new Folder object
Folder currentFolder = new Folder(folderName, folderPath, mp3Count + "");
if (!lastFolderPath.equals(folderPath)) {
Log.d("NEW", folderPath);
lastFolderPath = folderPath;
folderArrayList.add(currentFolder);
} else {
Log.d("OLD", folderPath);
//find a Folder object in folderArrayList where the object's path matches current folderPath
for (Folder folder : folderArrayList) {
String currentPath = folder.getFolder_Path();
if (currentPath.equals(folderPath)) {
//found a match
//update count
folder.setFolder_Song_Count(mp3Count + "");
}
}
}
}
}
}
}
Когда я запускаю этот код на устройстве, я в состоянии перечислить требуемые папки в RecyclerView, но с задержкой около 6-7 секунд.
Я уже перенес эту задачу в AsyncTask, так что мой UIThread не зависает из-за этой интенсивной операции.
Но я совершенно не понимаю, когда дело доходит до улучшения производительности файловой системы. Незлая помощь. Благодаря !
'listAllMusicFiles (String pathToDirectory). Вы конвертируете назад и форт между Sting и File. Сделайте его «listAllMusicFiles (каталог файлов)». – greenapps
'folderName = inFile.getParentFile(). GetName();' Это «f.getName();». – greenapps
Когда в каталоге вы найдете 100 mp3-файлов, вы в 100 раз перебираете список массивов, чтобы увидеть, есть ли эта папка. И затем вы меняете счет для этой папки сто раз. Это не может быть эффективным. Вы должны сначала подсчитать файлы в этой папке. И когда это делается с этой папкой, добавьте имя и пересчитайте один раз в массив. Тогда вам не нужно ничего проверять. – greenapps