2015-06-20 155 views
0

我沒有看到使用「handler.posDelayed」這種類型的真實答案。如何停止for循環中的handler.postDelayed?

所以,我用for循環多次執行「handler.posDelayed」。問題是,當我離開活動並重新啓動它時,新處理的對象和處理器中的舊對象也會執行。我不知道如何阻止處理程序中的舊對象。

 private Handler handler = new Handler(); 

     private void startHandler() { 

      handler.removeCallbacksAndMessages(runnable); // DOESN'T WORK 

      long time = 0; 
      for(int i = 0; i < balls.length; i++){ 
       handler.postDelayed(runnable, time + i); 
      } 
     } 

     private Runnable runnable = new Runnable() { 
      @Override 
      public void run() { 
       // Some code.. 
      } 
     }; 
+0

你打電話'onPause' /'onStop' /'onDestroy'上的'removeCallbacksAndMessages'? – pskink

+0

目前只在「startHandler」方法中。當我開始活動時調用該方法,因此我認爲這並不重要。我認爲問題在於,循環創建了多個可運行的腳本。@ pskink – Jeff

+0

只有一個Runnable,它不會被複制 – pskink

回答

1

首先,你應該使用removeCallbacks(),不removeCallbacksAndMessages()

也似乎已掛起Runnables當你Activity說「再見」,你應該刪除,所以嘗試調用removeCallbacks()在/onStop/onDestroy

+0

謝謝,它現在有效! :) – Jeff

+0

Bitteschön... :) – pskink