Private static ProgressDialog loading;
public void downloadData(){
Thread t = new Thread(){
public void run(){
//download stuff
}
handler.sendEmptyMessage(0);
};
t.start();
try{
t.join();
}catch(InterruptedException ignore){}
}
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
loading.dismiss();
}
};
Когда я вызываю donloadData без использования t.join()
, он отображает ProgressDialog.Индикатор выполнения не отображается при использовании соединения() на резьбе
Тем не менее, при использовании t.join()
поток t работает правильно, но ProgressDialog
не отображается.
Почему ProgressDialog
не отображается?
Любые предложения по изменению, чтобы я мог использовать t.join()
и отображать ProgressDialog
?
Почему вы это делаете? 't.start()', за которым следует 't.join()', функционально идентичен 't.run()', за исключением потери другого стека потоков и нескольких контекстных переключателей. – EJP
ProgressDialog не отображается, потому что вы используете join(). Итак, если вы хотите показать ProgressDialog, не используйте join(). Почему вы хотите использовать join() прямо после start()? Вы можете просто полностью забыть поток и просто вызвать загружаемый материал. –
Весь смысл потоков заключается в том, что ваша программа может одновременно выполнять две вещи. Если первый поток просто сидит и ждет второго, нет смысла создавать второй поток; просто выполните работу в первом. – Wyzard