Android service de ne pas s'arrêter quand stopService() est appelée

Je vais avoir un problème de l'arrêt d'un service que j'ai commencé.

Le service est appelé lorsque l'utilisateur se connecte, et commence à suivre la localisation de l'utilisateur. Cela fonctionne bien. Le service est censé s'arrêter lorsque l'utilisateur appuie sur le bouton de déconnexion et est connecté avec succès.

C'est un androïde de service qui est appelé au travers d'une interface JavaScript par un bouton HTML.

Ici est ma Classe Principale qui contient les méthodes pour démarrer et arrêter le service:

public class CasesMain extends DroidGap {
Intent gpsTracking;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    super.init();

    appView.addJavascriptInterface(this, "StartGPS");

    super.loadUrl(Config.getStartUrl());
}
public void startGPS(){
    gpsTracking = new Intent(this, MyService.class);
    startService(gpsTracking);
}

public void stopGPS(){
    stopService( gpsTracking );
}

}

Ici est la MyService classe:

public class MyService extends Service {
private LocationManager locManager;
private LocationListener locListener = new myLocationListener();
private boolean gps_enabled = false;
private boolean network_enabled = false;
private Handler handler = new Handler();
Thread t;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
}
@Override
public void onDestroy() {
}
@Override
public void onStart(Intent intent, int startid) {
}
public int onStartCommand(Intent intent, int flags, int startId) {
Toast.makeText(getBaseContext(), "Service Started", Toast.LENGTH_SHORT)
.show();
final Runnable r = new Runnable() {
public void run() {
location();
handler.postDelayed(this, 10000);
}
};
handler.postDelayed(r, 10000);
return START_STICKY;
}
public void location() {
locManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
try {
gps_enabled = locManager
.isProviderEnabled(LocationManager.GPS_PROVIDER);
} catch (Exception ex) {
}
try {
network_enabled = locManager
.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
} catch (Exception ex) {
}
if (gps_enabled) {
locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0,
0, locListener);
}
if (network_enabled) {
locManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,
0, 0, locListener);
}
}
private class myLocationListener implements LocationListener {
double lat_old = 0.0;
double lon_old = 0.0;
double lat_new;
double lon_new;
@Override
public void onLocationChanged(Location location) {
if (location != null) {
locManager.removeUpdates(locListener);
lon_new = location.getLongitude();
lat_new = location.getLatitude();
String longitude = "Longitude: " + location.getLongitude();
String latitude = "Latitude: " + location.getLatitude();
Log.v("Debug",  "Latt: " + latitude + " Long: " + longitude);
Toast.makeText(getApplicationContext(),
longitude + "\n" + latitude, Toast.LENGTH_SHORT).show();
lat_old = lat_new;
lon_old = lon_new;
}
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
}

}

Et voici mon appel pour arrêter le service: window.StartGPS.stopGPS();

Le début fonctionne parfaitement, mais lorsque je me déconnecte, l'application continue à afficher des messages du latt et le long de la signification de l'appel à stopService() soit ne fonctionne pas ou n'est pas appelé.

Peut-on voir d'où mon erreur est ou ce qui ne va pas?

Toute aide serait grandement appréciée!

FIXE
L'ajout de handler.removeCallbacksAndMessages(null); dans le onDestroy() méthode de MyService fixe pour moi.

OriginalL'auteur MrJR | 2014-01-03