Leí algunos artículos y ambos parecen hacer lo mismo y me preguntaba cuál es la diferencia entre iniciar el servicio así:
Intent intent = new Intent(this, HelloService.class);
startService(intent);
o así:
Calendar cal = Calendar.getInstance();
Intent intent = new Intent(this, MyService.class);
PendingIntent pintent = PendingIntent.getService(this, 0, intent, 0);
AlarmManager alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 30*1000, pintent);
Mientras leo, estos dos hacen lo mismo, si en el servicio devuelve un parámetro START_STICKY;
android
android-service
usuario3629316
fuente
fuente
Respuestas:
Intención
Un intento de Android es un objeto que lleva un intento, es decir, un mensaje de un componente a otro, ya sea dentro o fuera de la aplicación. Las intenciones pueden comunicar mensajes entre cualquiera de los tres componentes centrales de una aplicación: actividades, servicios y receptores de difusión.
La intención en sí, un objeto de intención, es una estructura de datos pasiva. Contiene una descripción abstracta de una operación a realizar.
Por ejemplo: digamos que tiene una actividad que necesita iniciar un cliente de correo electrónico y enviar un correo electrónico. Para hacer esto, su Actividad enviaría un Intent con la acción
ACTION_SEND
, junto con el selector apropiado, al Resolver Intent de Android:El selector especificado proporciona la interfaz adecuada para que el usuario elija cómo enviar sus datos de correo electrónico.
INTENCIONES EXPLÍCITAS
INTENCIONES IMPLÍCITAS
Intención pendiente
Un PendingIntent es un token que le da a una aplicación externa (por ejemplo, NotificationManager, AlarmManager, AppWidgetManager de pantalla de inicio u otras aplicaciones de terceros), que permite que la aplicación externa use los permisos de su aplicación para ejecutar un fragmento de código predefinido.
Ejemplo de intención pendiente: http://android-pending-intent.blogspot.in/
Fuente: Intents de Android e Intents pendientes de Android
Espero que esto ayude.
fuente
PendingIntent
es un envoltorio deIntent
. La aplicación externa que recibe elPendingIntent
, no sabe el contenido delIntent
cual está envueltoPendingIntent
. La misión de la aplicación extranjera es devolver la intención al propietario cuando se cumplen algunas condiciones (por ejemplo: alarma con horario o notificación con clic ...). Las condiciones las da el propietario, pero las procesa una aplicación extranjera (por ejemplo: alarma, notificación).Si la aplicación extranjera envió la intención a su aplicación, significa que la aplicación extranjera conoce el contenido de la intención. y la aplicación extranjera toma la decisión de enviar la intención, entonces su aplicación debe procesar la intención para cumplir con algunas condiciones => su aplicación obtiene el recurso de rendimiento del sistema.
fuente
Otra simple diferencia:
La intención normal morirá tan pronto como se elimine la aplicación.
Las intenciones pendientes nunca mueren. Estarán con vida mientras sea necesario para el servicio de alarma, el servicio de ubicación o cualquier otro servicio.
fuente
Iniciar servicios regularmente a través de AlarmManager
Al igual que con las actividades, el sistema Android puede finalizar el proceso de un servicio en cualquier momento para ahorrar recursos. Por esta razón, no puede simplemente usar un
TimerTask
en el servicio para asegurarse de que se ejecute de forma regular.Entonces, para la correcta programación del Servicio, use la
AlarmManager
clase.ACTUALIZAR:
Entonces no hay diferencia real entre los dos. Pero dependiendo de si quieres asegurar la ejecución del servicio o no, puedes decidir qué usar ya que para el primero no hay garantía y para el posterior sí.
Más información en AndroidServices .
fuente
getApplicationContext()
o lo use cuando lo desee estrictamente, solo lea - when-to-call-activity-context-or-application-context ( stackoverflow.com/questions/7298731/… ).Funcionalmente, no hay diferencia.
El significado de PendingIntent es que puede manejarlo en otra aplicación que luego puede usarlo como si la otra aplicación fuera usted mismo. Aquí está la explicación relevante de la documentación :
Entonces, PendingIntent es solo una referencia a los datos que representan el Intent original (que se usó para crear el PendingIntent).
fuente