Aquí probé un programa de servicio simple. El servicio de inicio funciona bien y genera Toast, pero el servicio de detención no. El código de este sencillo servicio es el siguiente:
public class MailService extends Service {
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
public void onCreate(){
super.onCreate();
Toast.makeText(this, "Service Started", Toast.LENGTH_SHORT).show();
}
public void onDestroyed(){
Toast.makeText(this, "Service Destroyed", Toast.LENGTH_SHORT).show();
super.onDestroy();
}
}
El código de la Actividad desde donde se llama este Servicio es el siguiente:
public class ServiceTest extends Activity{
private Button start,stop;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.service_test);
start=(Button)findViewById(R.id.btnStart);
stop=(Button)findViewById(R.id.btnStop);
start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
startService(new Intent(ServiceTest.this,MailService.class));
}
});
stop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
stopService(new Intent(ServiceTest.this,MailService.class));
}
});
}
}
Ayúdame a detener el servicio con ese botón de parada que genera tostadas en el método onDestroy (). Ya he visto muchas publicaciones relacionadas con el problema de detener el servicio aquí, pero no satisfactorias, por lo que publicando una nueva pregunta. Espero una respuesta satisfactoria.
stopService(serviceIntent)
funciona?Respuestas:
onDestroyed()
es un nombre incorrecto para
onDestroy()
¿Cometió un error solo en esta pregunta o también en su código?
fuente
intent = new Intent(ServiceTest.this,MailService.class)
y use la misma intención para iniciar y detener el servicio como startService (intent) y stopService (intent).@Override
anotación.Este código funciona para mí: verifique este enlace
Este es mi código cuando paro y comienzo el servicio en actividad
case R.id.buttonStart: Log.d(TAG, "onClick: starting srvice"); startService(new Intent(this, MyService.class)); break; case R.id.buttonStop: Log.d(TAG, "onClick: stopping srvice"); stopService(new Intent(this, MyService.class)); break; } } }
Y en clase de servicio:
@Override public void onCreate() { Toast.makeText(this, "My Service Created", Toast.LENGTH_LONG).show(); Log.d(TAG, "onCreate"); player = MediaPlayer.create(this, R.raw.braincandy); player.setLooping(false); // Set looping } @Override public void onDestroy() { Toast.makeText(this, "My Service Stopped", Toast.LENGTH_LONG).show(); Log.d(TAG, "onDestroy"); player.stop(); }
¡FELIZ CODIFICACIÓN!
fuente
Para detener el servicio debemos utilizar el método
stopService()
:Intent myService = new Intent(MainActivity.this, BackgroundSoundService.class); //startService(myService); stopService(myService);
entonces el método
onDestroy()
en el servicio se llama:@Override public void onDestroy() { Log.i(TAG, "onCreate() , service stopped..."); }
Aquí hay un ejemplo completo que incluye cómo detener el servicio.
fuente