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