¿Cómo detener varias instancias de un servicio de Android?

Todavía estoy trabajando en mi aplicación de Android basado en la ubicación. Tengo una clase AlarmService que inicia notificaciones y alertas de proximidad. Estoy comenzando este servicio con:

startService(intentAlarmService); 

Intento detener el servicio usando:

 Intent intentAlarmService = new Intent(this, AlarmService.class); stopService(intentAlarmService); 

Esto es lo que sucede: El servicio se detiene, pero luego, cuando inicie otra instancia del servicio (es decir, salir de la aplicación, iniciar la aplicación, iniciar el servicio) – descubro (a través de brindis) que las instancias anteriores del servicio son todavía corriendo. Por ejemplo, en la clase AlarmService, hay un LocationListener con el método onLocationChanged. Por lo tanto, en este método, pongo:

 Toast.makeText(AlarmService.this, "AlarmTitle: " + mAlarmTitle, Toast.LENGTH_SHORT).show(); 

Y cuando vuelvo a iniciar el servicio, tostadas siguen apareciendo con el AlarmTitles anterior, y el actual AlarmTitle.

Por lo tanto, algo no funciona cuando intento detener el AlarmService – ¿qué podría ser esto?

Nota: cuando vuelvo a instalar la aplicación, el servicio se detiene de verdad. Entonces cuando comienzo el servicio, solamente el alarmTitle actual demuestra en la tostada (quiero esto suceder cada vez).

Algo está mal con mi servicio. ¿Alguna idea de lo que puedo hacer?

Gracias.


CÓDIGO DE MI APP:

 public void onDestroy() { super.onDestroy(); Intent alarmIntent = new Intent(getApplicationContext(), AlarmReceiver.class); PendingIntent pendingIntentAlarm = PendingIntent.getBroadcast(getApplicationContext(), PENDING_INTENT_REQUEST_CODE1, alarmIntent, PendingIntent.FLAG_CANCEL_CURRENT); pendingIntentAlarm.cancel(); Intent intentAlarmService = new Intent(getApplicationContext(), AlarmService.class); stopService(intentAlarmService); mNtf.cancel(NOTIFICATION_ID1); mNtf.cancelAll(); } 

Descubro (a través de brindis) que las instancias anteriores del servicio todavía están funcionando.

Mi conjetura es que usted está escapando servicios, probablemente al no llamar a removeUpdates() para separar su LocationListener . Sólo hay una copia en ejecución real del servicio (desde el punto de vista del ciclo de vida de Android), pero está impidiendo que los demás servicios se recojan mediante su pérdida.

Además, reemplace todas las apariciones de getApplicationContext() con this .

Prueba esto

 private Boolean Tb = true; if(condition) { if(Tb) { Toast.makeText(getApplicationContext(),"content...", Toast.LENGTH_LONG).show(); } Tb =false; final Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { Tb =true; } }, Toast.LENGTH_LONG); } } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.