2012-08-28 204 views

回答

2

它不会显示出来,因为(阻塞)工作是在另一个线程中完成的。这意味着,start() - Thread-类的方法不会阻塞。

Ergo,你显示对话框,线程已启动,对话框立即被解除(因此关闭)。

run() -method的末尾拨打电话dismiss(),它应该可以正常工作。


以上可能适用于您,但您不应直接使用Thread -class。它周围有包装纸,使用起来更舒适。

在Android中,如果您想长期使用UI-Thread,请使用AsyncTask

+0

我第二卢卡斯对他的回答。 – VendettaDroid

+0

谢谢你,这个工作 – user1629115

+0

@ user1629115,正如我在我的答案更新中提到的那样,你可能会想用这种类型的'AsyncTask'。 –

0

另外,要建立在卢卡斯说的上,你可以看看这个例子。

http://www.helloandroid.com/tutorials/using-threads-and-progressdialog

public class ProgressDialogExample extends Activity implements Runnable { 

    private String pi_string; 
    private TextView tv; 
    private ProgressDialog pd; 

    @Override 
    public void onCreate(Bundle icicle) { 
      super.onCreate(icicle); 
      setContentView(R.layout.main); 

      tv = (TextView) this.findViewById(R.id.main); 
      tv.setText("Press any key to start calculation"); 
    } 

    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 

      pd = ProgressDialog.show(this, "Working..", "Calculating Pi", true, 
          false); 

      Thread thread = new Thread(this); 
      thread.start(); 

      return super.onKeyDown(keyCode, event); 
    } 

    public void run() { 
      pi_string = Pi.computePi(800).toString(); 
      handler.sendEmptyMessage(0); 
    } 

    private Handler handler = new Handler() { 
      @Override 
      public void handleMessage(Message msg) { 
        pd.dismiss(); 
        tv.setText(pi_string); 

      } 
    }; 

}