我有一个线程运行多次操作一次,我想停止它,当用户取消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