2011-08-01 19 views
5

Tengo entendido que si quiero que un servicio se ejecute incluso si no hay nada limitado a él, primero debe iniciarse con startService (Intent i).Wait on startService before bindService

Mi pregunta es ¿QUÉ PASA SI QUIERO VINCULAR AL SERVICIO INMEDIATAMENTE DESPUÉS DE INICIARLO? ¿GARANTIZARÍA EL CÓDIGO SIGUIENTE QUE EL SERVICIO SE CREA CON STARTERvice()?

Método estático dentro de la clase de servicio:

public static void actStart(Context ctx) { 
    Intent i = new Intent(ctx, BGService.class); 
    i.setAction(ACTION_START); 
    ctx.startService(i); 
} 

La actividad de unión:

BGService.actionStart(getApplicationContext());  
bindService(new Intent(this, BGService.class), serviceConnection, Context.BIND_AUTO_CREATE); 
+0

Me enfrento con el mismo problema. ¿Has encontrado una decisión? –

+3

El servicio de enlace realmente espera a que termine el servicio de inicio – Paul

Respuesta

0

No estoy seguro de lo que está tratando de hacer aquí, pero "Context.BIND_AUTO_CREATE" crea el Servicio luego se une al servicio incluso si no se ha iniciado.

Ahora bien, si desea acceder a él inmediatamente después de la unión, se puede utilizar el método onServiceConnected() de la serviceConnection:

new ServiceConnection() { 
     @Override 
     public void onServiceConnected(ComponentName className, 
       IBinder service) { 
      //put your code here... 
     } ... 
0

Para añadir a la respuesta de Bugdayci, un ejemplo completo es el siguiente:

 ServiceConnection myConnection = new ServiceConnection() { 
      @Override 
      public void onServiceConnected(ComponentName className, 
        IBinder service) { 
        ... your code that needs to execute on service connection  

      } 


    @Override 
    public void onServiceDisconnected(ComponentName name) { 
     ... your code that needs to execute on service disconnection 

    } 
     }; 

     Intent intent = new Intent(this, TheServiceClassName.class); 
     bindService(intent, myConnection, Context.BIND_AUTO_CREATE); 

...

sin la bindService al final, la onServiceConnected() código no se ejecutará.