2013-12-18 55 views
0

我正在使用處理程序postDelayed()啓動計時器7秒。如果在這段時間內我收到服務器的回覆,我會停止計時器。但如果答覆沒有在7秒內收到,它會顯示錯誤。stop先前處理程序postdelayed並開始新的

我使用此代碼爲目的

handler = new Handler(); 

Runnable wait4TO = new Runnable(){ 
    @Override 
    public void run() { 
     if(pressedButton==INACTVE) ; 
     // if reply is recieved pressedbutton will be INACTIVE 

     else 
     { 
      sentFailed(); 
     } 

    } 
}; 

handler.postDelayed(wait4TO, 7000); 

它工作正常,但如果發送另一個消息我想取消此超時,並開始一個新的或擴大現有超時另外7秒。我該如何實現這個目標?

我試圖通過使用handler.removeCallbacks(wait4TO)handler.removeCallbacks(null)取消處理程序,但沒有成功。以前的處理器將仍然運行

+0

這很奇怪。你確定你只有一個處理程序對象的實例嗎? – Blackbelt

+0

@blackbelt當我發送消息時,上面的代碼被調用 – dmSherazi

+0

那麼您是否爲您發送的每條消息都創建了一個新的處理程序?這將是更好的,你可以張貼更多的代碼/上下文 – Blackbelt

回答

2

removeCallbacks的作品。只要知道每個處理程序都是它自己的隊列,並且在你的情況下,爲了實現你想要的,你只需要一個Handler實例。

2

所以也許嘗試添加您在可運行

boolean flag=true; 

Runnable wait4TO = new Runnable(){ 
    @Override 
    public void run() { 
if(!flag) 
return; 
     if(pressedButton==INACTVE) ; 
     // if reply is recieved pressedbutton will be INACTIVE 

     else 
     { 
      sentFailed(); 
     } 

    } 
}; 

handler.postDelayed(wait4TO, 7000); 

檢查標誌,當你想你剛纔設置標誌停用它爲false;

最終嘗試

handler.removeCallbacs(wait4TO);

+0

謝謝我得到了它的工作。 – dmSherazi

相關問題