2015-09-10 94 views
1

我想停止處理程序自我處理程序,但我得到這個錯誤。在這種情況下如何停止處理程序?停止自己的處理程序

無法實例Runnable接口類型

代碼:

new Handler().postDelayed(new Runnable() { 
       @Override 
       public void run() { 
        senseWiFi(); 
        if(WIFINumberList.size() > 1){ 
         int first = WIFINumberList.get(0); 
         int second = WIFINumberList.get(1); 
         if(first == second){ 
          route_number = first; 
          System.out.println("route equal route_number."); 
         //Here I mam getting the error. 
          new Handler().removeCallbacks(new Runnable()); 
         }else{ 
          System.out.println("route equal ZERO."); 
         } 

        } 
       } 
      }, 1*30 * 1000); 

回答

2

這裏:

new Handler().removeCallbacks(new Runnable()); 

意味着創造的Handler並從刪除回調新對象傳遞Runnable的新對象。

取而代之的是建立處理程序的一個單獨的對象和Runnable,如:

Handler handler=new Handler(); 
handler.postDelayed(runnable); 
Runnable runnable =new Runnable() { 
     @Override 
     public void run() { 
     // your code here 
     //remove callback here 
     handler.removeCallbacks(runnable); 
    } 
} 

手段使用兩種處理器的同一個對象,Runnable接口被用於調用postDelayed方法,而不是創建新的對象

+0

我來仔細檢查,但看起來處理程序使用它們關聯的循環中的隊列,這意味着在技術上創建一個新的處理程序並調用removeCallbacks應該可以工作。儘管如此,我更喜歡你的方式,但你有一些錯誤:處理程序需要* final *,並在使用它之後創建runnable;) – Zharf

+0

@Zharf:'Handler need to final' when它是在一個方法內部聲明的,但是如果你在類的層次聲明它並且在任何方法中初始化,那麼不需要最終確定它 –

+0

沒錯,你的回答在代碼周圍有點不清楚。 – Zharf