Android: Inicie el servicio con Context.startService vs PendingIntent.getService

Context.startService

Intent intent = new Intent(context, MyService.class); context.startService(intent); 

PendingIntent.getService

 Intent intent = new Intent(context, MyService.class); PendingIntent pi = PendingIntent.getService(context, 0, intent, 0); pi.send(); 

Preguntas

  1. ¿Cuándo comenzarías un servicio con Context.startService vs a PendingIntent?
  2. ¿Por qué usar uno sobre el otro?

Realmente no hay diferencia.

Específicamente, el método Context se utiliza para iniciarlo directamente donde PendingIntent normalmente se utiliza con una notificación para disparar esta intención cuando se pulsa, lo cual se retrasa hasta que el usuario lo toque (normalmente). Sin embargo; Normalmente no enviaría PendingIntent directamente porque no es para lo que sirve.

Un PendingIntent es un intento que está pendiente, pendiente, lo que significa que no se supone que suceda ahora, pero en un futuro próximo. Mientras que con una intención, se envía en el mismo momento.

Si un PendingIntent no está pendiente cuando se utiliza, entonces ya no es un PendingIntent y es de hecho un Intent. Derrotar el propósito por completo .

PendinIntents son muy utilizados para widgets. Como el diseño de un widget en ejecución no "pertenece" a tu código, sino que está bajo control del sistema, no puedes asignar directamente a los elementos de la interfaz. En su lugar, se asigna un PendingIntent a esos elementos (como botones), de modo que cuando el usuario los toca, PendingIntent es "ejecutado", algo así como:

 // get the widget layout RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.id.widget_layout); // prepare to listen the clicks on the refresh button Intent active = new Intent(context, WidgetCode.UpdateService.class); PendingIntent refreshPendingIntent = PendingIntent.getService(context, 0, active, 0); remoteViews.setOnClickPendingIntent(R.id.buttonWidgetRefresh, refreshPendingIntent); // send the changes to the widget AppWidgetManager.getInstance(context).updateAppWidget(appwidgetid, remoteViews); 

En este caso, un botón del widget inicia un servicio. Por lo general, poner información adicional en la intención, con putExtras (), por lo que el servicio recibirá la información necesaria para hacer su trabajo.

  • Uso de AlarmManager para actualizar widgets manualmente
  • No puedo obtener los extras de mi intención?
  • Intentos pendientes no disparados
  • Notificación de Android PendienteIntentos adicionales null
  • ¿Es posible crear múltiples PendingIntents con el mismo requestCode y diferentes extras?
  • ¿Se ha admitido requestCode en PendingIntent?
  • ¿El mensaje de GCM se está reemplazando?
  • Pasando valores en intentos pendientes de Android
  • Enviar difusión al hacer clic en la notificación
  • Android: ¿Cómo puedo acceder a un AsyncTask desde un PendingIntent creado por una notificación de barra de estado?
  • La acción de notificación de Android no se activa (PendingIntent)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.