実際にプロセスが実行されていることを示すために進行中のバーを設定できるようにするために、フローズン。このプロセスでは多くの音楽ファイルがコピーされ、使用可能なファイルの数に応じて1分以上かかる場合があります。コードが実行される前にプログレスバーの可視性が設定されていない
問題は、プログレスバーの可視性を設定する前にコードを実行しているようです。
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
プログレスバーのペイントはUIスレッドで行う必要がありますが、ファイルのコピー中はブロックしています。 –
スレッドが終了したときに検出する方法はありますか? – r2DoesInc