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();
}
};
当我在不使用t.join()
的情况下调用donloadData时,它会显示ProgressDialog。
但是,使用t.join()
时,t线程似乎正确执行但ProgressDialog
未显示。
为什么ProgressDialog
没有显示?
有关更改内容的任何建议,以便我可以使用t.join()
并显示ProgressDialog
?
答案 0 :(得分:0)
t.join
方法将阻止当前线程,直到t thread
完成它的工作。
试试这个:
Private static ProgressDialog loading;
public void downloadData(){
Thread t = new Thread(){
public void run(){
//download stuff
//edit: when finish down load and send dismiss message
handler.sendEmptyMessage(0);
}
//handler.sendEmptyMessage(0);
};
//edit: before start make the dialog show
loading.show();
t.start();
//edit: the join method is not necessary
try{
t.join();
}catch(InterruptedException ignore){}
}
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
loading.dismiss();
}
};
以上代码可能会解决您的问题。
答案 1 :(得分:0)
join()是一个呼唤死亡。如果一个线程阻塞或卡住,在它上面调用join()可以确保卡住有效地扩展到调用线程。
如果你可以侥幸逃脱,请不要使用join()。特别是不要在start()之后直接调用它来等待来自另一个线程的结果。 Double-特别是不要在GUI事件处理程序中使用它。