2014-05-07 133 views
0

我有一個應用程序在後臺啓動服務。我希望它能夠在進程結束後停止在此服務上運行的處理程序。如果我按下後退按鈕,它會正確運行。但是,如果我不按回按鈕,如果應用程序仍然運行,服務不會停止。我下面的方法:運行應用程序時無法停止處理程序和服務

首先,這種方法運行時調用的服務:

public void startChecking() { 
    handler = new Handler(); 
    runnable = new Runnable() { 
     @Override 
     public void run() { 
      wifiManager = (WifiManager) getSystemService(WIFI_SERVICE); 
      wifiInfo = wifiManager.getConnectionInfo(); 
      Log.d("ssid", "Checking..."); 
      checkWifi(wifiInfo.getSSID()); 
      handler.postDelayed(this, CHECK_TIME * 1000); 
     } 
    }; 
    handler.postDelayed(runnable, CHECK_TIME * 1000); 
} 

checkWifi方法:

public void checkWifi(String ssid) { 
    if (ssid.equals("\"" + SSID + "\"")) { 
     Log.d("ssid", "SMS sending..."); 
     sendSMS(); 
     stopEverything(); 
    } 
} 

,最後一個。 stopEverything方法:

public void stopEverything() { 
    handler.removeCallbacks(runnable); 
    stopSelf(); 
    stopService(new Intent(this, WifiService.class)); 
    onDestroy(); 
} 

所有這些方法都在服務。我從我的主課叫這個服務。我怎樣才能停止計時器和正確的服務?

+2

關於處理程序,這裏的問題是,當沒有回調時調用'removeCallsbacks',因爲'checkWifi'在postDelayed之前被調用(postDelayed是向處理程序添加回調的東西。) – njzk2

+0

能否請你解釋一下它通過重構代碼? – halilkaya

回答

0

我已經通過考慮@ njzk2的評論解決了我的問題。謝謝。

相關問題