loading doesn't cause unavoidable lag (removed excessive blocking);

switched to a blocking queue list to manage album cover loading; threads
that should be daemons are daemons now;
This commit is contained in:
2018-08-23 22:21:33 -05:00
parent 211e37866e
commit b97d772ee9
3 changed files with 77 additions and 69 deletions

View File

@@ -149,6 +149,7 @@ public class MusicList extends Observable {
@Override
public void run() {
Gdx.app.debug("MusicList", "recursive async search beginning.");
Array<FileHandle> obtainedAudioFiles = recursiveMusicSearch(directory);
Sort.instance().sort(obtainedAudioFiles, compare);
if (work) {
@@ -164,6 +165,7 @@ public class MusicList extends Observable {
if (thread == null) {
work = true;
thread = new Thread(this, threadName);
thread.setDaemon(true);
thread.start();
return true;
} else {

View File

@@ -40,6 +40,10 @@ public class MusicMetadataController extends Observable implements Disposable, O
}
}
/**
* if there is the same amount of metadata as there is music in the music list.
* @return whether or not both sizes are equal.
*/
public boolean isDone() {
return (metadataArray.size == musicList.getMusicArray().size);
}
@@ -52,15 +56,11 @@ public class MusicMetadataController extends Observable implements Disposable, O
}
public int size() {
synchronized (loadingThread) {
return metadataArray.size;
}
return metadataArray.size;
}
public AudioMetadata getMetadata(int index) {
synchronized (loadingThread) {
return metadataArray.get(index);
}
return metadataArray.get(index);
}
@@ -80,28 +80,25 @@ public class MusicMetadataController extends Observable implements Disposable, O
@Override
public void run() {
Gdx.app.debug(name, "loading...");
clear();
searching = true;
for (int i = 0; i < metadataArray.size; i++) {
metadataArray.get(i).dispose();
}
metadataArray.clear();
Array<AudioMetadata> tempMetadataArray = new Array<>();
for (int i = 0; i < musicList.getTotal() && work; i++) {
FileHandle musicFile = musicList.getMusicArray().get(i);
synchronized (this) {
switch (SupportedFormats.valueOf(musicFile.extension().toUpperCase())) {
case MP3:
metadataArray.add(new MP3Metadata(musicFile));
break;
case WAV:
metadataArray.add(new WAVMetadata(musicFile));
break;
default:
break;
}
switch (SupportedFormats.valueOf(musicFile.extension().toUpperCase())) {
case MP3:
tempMetadataArray.add(new MP3Metadata(musicFile));
break;
case WAV:
tempMetadataArray.add(new WAVMetadata(musicFile));
break;
default:
break;
}
}
if (work) {
metadataArray = tempMetadataArray;
searching = false;
Gdx.app.debug(name, "load complete.");
setChanged();
@@ -130,4 +127,11 @@ public class MusicMetadataController extends Observable implements Disposable, O
loadAudioMetadata();
}
}
public void clear() {
for (int i = 0; i < metadataArray.size; i++) {
metadataArray.get(i).dispose();
}
metadataArray.clear();
}
}