2
我有一個長時間運行的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 2011-12-31 08:43:37
進度條的繪製必須在UI線程中完成,但是您在複製文件時會阻止它。 – 2011-12-31 08:45:19
有沒有辦法檢測線程何時完成? – r2DoesInc 2011-12-31 09:01:57