У меня есть длительный процесс io, который я хотел бы установить во время выполнения, чтобы показать, что на самом деле процесс выполняется, и приложение не просто замораживали. Процесс копирует много музыкальных файлов и может занимать больше минуты в зависимости от того, сколько из них доступно.Видимость индикатора выполнения не устанавливается перед выполнением кода
Проблема заключается в том, что она выполняет код перед установкой видимости индикатора выполнения.
public void makeAvailable() {
mProgressBar.setVisibility(View.VISIBLE);
File dir = new File(gMusic);
String[] songNames = dir.list();
File[] songs = dir.listFiles();
for (int i=0; i<songs.length; i++) {
File song = songs[i];
String songName = songNames[i];
String[] bits = songName.split("/");
String songStripped = bits[bits.length-1];
File output = new File(Constants.gMusicSniperDir + "music/" + songStripped);
try {
copyFile(song, output);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
mProgressBar.setVisibility(View.INVISIBLE);
}
Как вы видите, это циклически проходит через каталог и копирует все файлы. Когда он запускается, единственным признаком всего, что происходит, является то, что кнопка, привязанная к процессу, не оставляет «нажатого» состояния - она остается выделенной синей.
Я вижу, что вы говорите, и это имеет смысл, хотя почему это может привести к тому, что видимость не изменится? – r2DoesInc
Картина индикатора выполнения должна быть выполнена в потоке пользовательского интерфейса, но вы блокируете ее при копировании файлов. –
Есть ли способ обнаружить, когда нить заканчивается? – r2DoesInc