gpt4 book ai didi

java - 在执行代码之前未设置进度条可见性

转载 作者:搜寻专家 更新时间:2023-11-01 08:12:19 26 4
gpt4 key购买 nike

我有一个长时间运行的 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);
}

如您所见,它循环遍历目录并复制所有文件。当它运行时,发生任何事情的唯一迹象是绑定(bind)到进程的按钮不会离开“按下”状态 - 它保持突出显示为蓝色。

最佳答案

看起来您正在 UI 线程中完成所有工作。您应该在后台线程中完成所有繁重的工作(列出目录的内容和复制文件),向 UI 线程发送请求只是为了更新进度条。

ProgressBar文档给出了一个例子。

请注意,这只是一个常见主题的示例:您不应长时间阻塞 UI 线程,否则您的应用程序将变得无响应。参见 "Designing for Responsiveness"了解更多详情。

关于java - 在执行代码之前未设置进度条可见性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8687203/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com