2012-08-28 172 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); 

      } 
    }; 

}