我有一個線程運行多次操作一次,我想停止它,當用戶取消ProgressDialog
。取消ProgressDialog並停止線程
public void run() {
//operation 1
//operation 2
//operation 3
//operation 4
}
這個線程只運行一次,所以我不能實現一個循環來檢查他的線程是否仍然運行。
這裏是我的ProgressDialog:
//Wait dialog
m_dlgWaiting = ProgressDialog.show(m_ctxContext,
m_ctxContext.getText(R.string.app_name),
m_ctxContext.getText(R.string.msg_dlg_analyse_pic),
true, //indeterminate
true,
new OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
m_bRunning = false;
}
});
由於我不知道如何停止線程,這將是正確的,通過一個循環測序線程的操作,看它是否仍然應該是運行,或有沒有更好的辦法 ?
public void run() {
int op = 0;
while(m_bRunning) {
switch(op) {
case 0 :
//operation 1
break;
case 1 :
//operation 2
break;
case 2 :
//operation 3
break;
case 3 :
//operation 4
break;
}
op++;
}
}
即使有這樣的解決方案,如果在線程太多的操作,也可能是難以測序的操作。有沒有更好的方法來實現這一目標?
謝謝,我不確定是否可以使用AsyncTasks,因爲這些操作是同步的,但是我將用此替換我的線程。順便說一下,如果在任務中進行網絡操作,將AsyncTask作爲我的活動的一員,這是一個很好的實踐嗎? – 2013-03-12 11:44:47
是的,你可以使用它作爲一個成員,但是你必須在執行之前每次初始化它(一個實例可以被執行一次)。 – 2013-03-12 11:47:16