Los métodos onStartCommand() y onStart() 

Cuando se crea un servicio hay que tener en cuenta una cuestión de compatibilidad. El método onStartCommand() aparece a partir del nivel de API 5, en sustitución de onStart(). Si trabajas con una versión inferior a la 2.0, reemplaza este método por el código siguiente:

Ejercicio paso a paso: Los métodos onStartCommand() y onStart().

1. Comenta el en ejercicio anterior el método onStartCommand()

2. Añade el siguiente método:

@Override

   public void onStart(Intent intent, int startId) {

          Toast.makeText(this, "Servicio arrancado " + startId,

                                                                         Toast.LENGTH_SHORT).show();

          reproductor.start();

   }

3. Verifica que el programa funciona exactamente igual.

4. Comenta el método onStart () y quita el comentario al método onStartCommand().

Si lo comparas con onStartCommand(), este último tiene un parámetro más y permite devolver un resultado. Veámoslos con más detalle, dado que sus parámetros pueden ser utilizados para obtener información valiosa:

public int onStartCommand (Intent intencion, int flags, int idArranque)

Llamado cada vez que un cliente inicializa un servicio mediante el método startService(). Los parámetros se detallan a continuación:

intencion  Un objeto Intent que se indicó en la llamada startService(Intent).

flags  Información sobre como comienza la solicitud. Puede ser 0, START_FLAG_REDELIVERYo START_FLAG_RETRY. Un valor distinto de 0 se utiliza para reiniciar un servicio tras detectar algún problema.

idArranque Un entero único representando la solicitud de arranque específica. Usar este mismo estero en el método stopSelfResult(int idArranque).

 Retorna describe cómo ha de comportarse el sistema cuando el proceso del servicio sea matado una vez que el servicio ya se ha inicializado. Esto puede ocurrir en situaciones de baja memoria. Los siguientes valores están permitidos:

START_STICKY: Cuando sea posible el sistema tratará de recrear el servicio, se realizará una llamada a onStartCommand() pero con el parámetro intencion igual a null. Esto tiene sentido cuando el servicio puede arrancar sin información adicional, como por ejemplo, el servicio mostrado para la reproducción de música de fondo.

START_NOT_STICKY: El sistema no tratará de volver a crear el servicio, por lo tanto el parámetro intencion nunca podrá ser igual a null. Esto tiene sentido cuando el servicio no puede reanudarse una vez interrumpido.

START_REDELIVER_INTENT: El sistema tratará de volver a crear el servicio. El parámetro intencion será el que se utilizó en la última llamada startService(Intent).   


START_STICKY_COMPATIBILITY: Versión compatible de START_STICKY, que no garantiza que onStartCommand() sea llamado después de que el proceso sea matado.