Вот сделка, мне нужно запустить операцию и показать индикатор выполнения во время его запуска. Я решил, что мне нужно запустить обновление строки выполнения в другом потоке, потому что, если я этого не сделаю (я попробовал), панель не обновляется до конца операции. Я написал код ниже, однако он не работает, вместо этого сбой приложения. Я считаю, что проблема связана с синхронизацией потоков, но я не уверен (во второй раз работая с потоками Java, пожалуйста, пощадите меня, я все еще новичок). Это работает на Android.Связь с потоком Android для диалога прогресса
Можете ли вы обнаружить какую-либо незаконную операцию, о которой я не знаю? Благодаря!
ProgressDialog progress; //Global, declared somewhere else
final Object flag = new Object();
Thread progressThread;
//More Code...
progress.show();
progress.setMax(auxMobile.size() + auxStatic.size());
progress.setProgress(0);
progressThread = new Thread(new Runnable() {
@Override
public void run() {
try {
synchronized (flag) {
while (progress.getProgress() < progress.getMax()) {
progress.incrementProgressBy(1);
flag.wait();
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
progressThread.start();
try {
for(int i=0; i<auxStatic.size(); i++) {
//More Code...
flag.notify();
}
for(int i=0; i<auxMobile.size(); i++){
//More Code...
flag.notify();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}