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();
}
所有這些方法都在服務。我從我的主課叫這個服務。我怎樣才能停止計時器和正確的服務?
關於處理程序,這裏的問題是,當沒有回調時調用'removeCallsbacks',因爲'checkWifi'在postDelayed之前被調用(postDelayed是向處理程序添加回調的東西。) – njzk2
能否請你解釋一下它通過重構代碼? – halilkaya