我正在使用ProgressDialog。当用户关闭ProgressDialog时,我需要停止线程。不幸的是,出现了异常。
在内部类中:
class UpdateThread extends Thread{
public void run() {
while (true){
count=adapter.getCount();
try {
mHandler.post( new Runnable() {
public void run() {
Log.i(TAG,count+"count");
progressDialog.setMessage(count + "Device found");
}
});
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
OnCreate:
updateThread=new UpdateThread();
progressDialog= new ProgressDialog(GroupListActivity.this);
synchronized (this) {
updateThread.start();
}
在解雇时:
progressDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
try {
synchronized (this) {
updateThread.wait(300);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
Log.i(TAG,"Thread is stopped");
}
});
wait
,就必须使用synchronized
,但我不明白(a)为什么在调用updateThread.start
时也要同步,或者(b)为什么要使用wait
(因为你没有使用notify
或notifyAll
)。我怀疑你在不应该的地方进行了同步和使用wait
。 - Krease