2010-06-25 25 views
5

estoy siguiendo un tutorial para setup a service to start on boot donde la última parte del código es:¿Debo agregar un filtro de intención al iniciar un servicio?

hace un registro de este servicio en AndroidManifest.xml como

<service android:name="MyService"> 
<intent-filter> 
<action 
android:name="com.wissen.startatboot.MyService" /> 
</intent-filter> 
</service> 

Ahora se inicia este servicio en el método de la OnReceive BroadcastReceiver MyStartupIntentReceiver como

public void onReceive(Context context, Intent intent) { 
    Intent serviceIntent = new Intent(); 
    serviceIntent.setAction("com.wissen.startatboot.MyService"); 
    context.startService(serviceIntent); 

} 

Como ve, utiliza filtros de intenciones y cuando se inicia el servicio agrega acción. ¿Puedo usar

startService(new Intent(this, MyService.class)); 

¿Cuál es la ventaja de uno comparado con el otro?

Respuesta

7

Suponiendo que todo esto se encuentre en una aplicación, puede usar el último formulario (MyService.class).

¿Cuál es la ventaja de uno en comparación con el otro?

Usaría la cadena de acción personalizada si desea que terceros inicien este servicio.

0

Como ya he mencionado en el comment, las acciones pueden ser útiles para la autoevaluación. Por ejemplo, un servicio realiza muchas tareas. Para cada tarea hay una acción. Si el servicio se inicia con una acción desconocida, se lanzará un IllegalArgumentException.

Normalmente utilizo este enfoque en onStartCommand.

String action = intent.getAction(); 
if (action.equals(ACT_1)) { 
    // Do task #1 
} else if (action.equals(ACT_2)) { 
    // Do task #2 
} else { 
    throw IllegalArgumentException("Illegal action " + action); 
} 
Cuestiones relacionadas