我有一個線程,顯示秒錶像減少時間。該線程計數1分鐘。在這一分鐘內,用戶必須回答一個問題。如果用戶在完成一分鐘之前回答問題,則向他顯示下一個問題,並且線程被重置爲計數1分鐘。重新啓動一個線程 - 這是我的頭
我面對的問題是,當我調用reStartTimeKeeper()時,計時器重新啓動,但它開始更快計數。隨後的每一次電話會進一步提高櫃檯的速度。我的意思是,在第一次調用reStartTimeKeeper()之後,我的timmer在30秒(大約)內計數60秒,在第二次調用reStartTimeKeeper()後,我的計時器在15秒內(約)計數60秒。等等。
原因是當我在reStartTimeKeeper()中設置Question_Time = -1時,線程的第一個實例被暫停。它不斷地執行while循環,就好像它正在等待while()中的條件變爲真。
當我嘗試啓動線程的第二個實例時,我設置Question_Time = 60。這啓動線程的新實例。這樣做也會激活正在等待條件成熟的休眠第一個實例。
我只想在任何時間的任何實例的我的線程的1個實例。我把它變成了一個靜態變量。這樣做也沒有效果。
int Question_Time=-1;
static Thread timeKeeper;
Handler mHandler = new Handler();
void Start_TimeKeeper()
{
Question_Time=60;
timeKeeper = new Thread(new Runnable() {
@Override
public void run() {
while (Question_Time!=-1)
{
mHandler.post(new Runnable()
{
@Override
public void run()
{
Question_Time--;
UpdateUI();
}
});
try
{
Thread.sleep((1000));
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
});
timeKeeper.start();
}
void reStartTimeKeeper()
{
Question_Time=0;
while(Question_Time==-1);
Start_TimeKeeper();
}
如果有人能夠同步這個流程,那就太好了! 如果你發現任何愚蠢的東西或改進建議,這將是最受歡迎的。 謝謝!
當我嘗試啓動線程的第二個實例時,我設置Question_Time = 60。這啓動線程的新實例。這樣做也會激活正在等待條件成熟的休眠第一個實例。我想聯合殺死線程的第一個實例,當它被殺死時,我想安全地重新啓動新的實例。
whya不使用CountDownTimer? – Opiatefuchs
我只是有一些空閒時間,我想,用線程做這件事會讓我更好地理解線程。 CountDownTimer可以是我的最後一招!這個任何建議? –
是的,這可能是一個很好的方法,但定時器更準確,你有簡單的解決方案,用cancel()來阻止它們。 – Opiatefuchs