2009/06/10

[Android] 在thread 中呼叫 Progress Dialog

我們都知道,在一個分支的thread 中是無法直接呼叫UI Thread的。但在很多情況下,我們必須利用在UI Thread 的背後執行一些比較耗時的工作。在這種情況裡,非UI Thread 無法直接呼叫類似Progress Dialog這種顯示App正在工作的UI。這時Handler就派上用場啦。


public class ProgressDialogExample extends Activity implements Runnable {
private String pi_string;
private TextView tv;
private ProgressDialog pd;

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

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

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


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);
}
};
}

在這個例子中,當程式一開啟我們就會進入計算pi 的程序,並且顯示 Progress Dialog。由於計算必須費時,所以我們把它放在另一個單獨的Thread中。但當程式計算結束之後,這個單獨的Thread將會送一個資訊給handler,這時在handler裡頭也就會將 Progress Dialog 關閉。當然我們也可以選擇開啟另外一個在UI Thread的動作,您只需要改變handleMessage()裡頭的程式碼即可。

沒有留言: