Java 执行代码前未设置进度条可见性
我有一个长时间运行的io进程,我希望能够在运行期间设置一个进度条,以显示实际上有一个进程正在运行,并且应用程序不仅仅是冻结的。这个过程复制了许多音乐文件,可能需要一分钟以上的时间,具体取决于有多少可用的音乐文件 问题是,它似乎在设置进度条可见性之前执行代码Java 执行代码前未设置进度条可见性,java,android,progress-bar,Java,Android,Progress Bar,我有一个长时间运行的io进程,我希望能够在运行期间设置一个进度条,以显示实际上有一个进程正在运行,并且应用程序不仅仅是冻结的。这个过程复制了许多音乐文件,可能需要一分钟以上的时间,具体取决于有多少可用的音乐文件 问题是,它似乎在设置进度条可见性之前执行代码 public void makeAvailable() { mProgressBar.setVisibility(View.VISIBLE); File dir = new File(gMusic);
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);
}
public void makeAvailable(){
mProgressBar.setVisibility(View.VISIBLE);
文件目录=新文件(gMusic);
String[]songNames=dir.list();
File[]songs=dir.listFiles();
对于(int i=0;i来说,您似乎正在UI线程中完成所有工作。您应该在后台线程中完成所有繁重的工作(列出目录内容,并复制文件),将请求发布到UI线程,只是为了更新进度条
文档中给出了一个例子
请注意,这只是一个常见主题的示例:您不应该在很长的时间内阻止UI线程,否则您的应用程序将变得无响应。有关更多详细信息,请参阅。我明白您的说法,这是有道理的,但为什么这会导致可见性不改变?进度条的绘制必须在UI线程,但您在复制文件时阻止了它。线程完成后,使用处理程序隐藏pbar。感谢您的帮助!:D