2011-04-05 23 views
59

Aquí probé el programa de servicio simple. El servicio de inicio funciona bien y genera Toast, pero el servicio de detención no funciona. El código de este servicio simple es la siguiente:detener el servicio en android

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 a este servicio es la 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)); 
      } 
     }); 
    } 
} 

me ayuda para dejar de servicio con ese botón de parada que genera brindis en el método onDestroy(). Ya he visto muchas publicaciones relacionadas con el problema de detención de servicio aquí, pero no son satisfactorias, por lo que se publica una nueva pregunta. Espero una respuesta satisfactoria.

+6

¿'stopService (serviceIntent)' no funciona? –

+0

* "Además, tenga en cuenta que el momento exacto del servicio de ser destruida corresponde a Android y puede no ser inmediata." * Desde: http://stackoverflow.com/questions/2176375/android-service-wont-stop/2176415 # 2176415 – bigstones

+1

@chris: Creo que el método stopService (serviceIntent) tal como lo implementé anteriormente no funcionó porque Toast at onDestroy() no se produjo al hacer clic en el botón de detención. –

Respuesta

39
onDestroyed() 

es un nombre equivocado para

onDestroy() 

¿Usted hizo un error sólo en esta cuestión o en su código también?

+0

Sí más tarde hice mi código desde cero y funcionó bien. Cualquiera, sí, puede ser ese problema en mi código anterior que otros y tampoco noté. De cualquier forma, gracias :) Como también ayuda a otros también. –

+2

@RaviBhatt Entonces, ¿ha logrado detener un servicio? Si es así, ¿puedes compartir cómo hacerlo? – suraj

+0

@suraj [¿qué pasa con docs?] (Http://developer.android.com/reference/android/app/Service.html#ServiceLifecycle) – kreker

9

Este código funciona para mí: marque esta link
Este es mi código cuando i detener e iniciar el servicio en la 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 la 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(); 
} 

CODIFICACIÓN FELIZ!

+0

Gracias! claro y simple – Herman

4

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 que se llama:

@Override 
    public void onDestroy() { 

     Log.i(TAG, "onCreate() , service stopped..."); 
    } 

Aquí es una complete example incluyendo cómo detener el servicio

Cuestiones relacionadas