Mejor momento / ubicación para configurar un AlarmManager

Mi aplicación muestra contenido para un sitio que también tiene un sistema de notificación. Quiero mostrar si hay nuevas notificaciones, y estoy usando un AlarmManager que llama a un IntentService .

Mi pregunta es: ¿dónde debo comenzar / registrar este AlarmManager ? Lo he puesto en el onCreate() de mi actividad sólo por la prueba de concepto (y su funcionamiento bien, muchas gracias :)), pero si usted comenzaría esa actividad dos veces, usted conseguiría alarmas múltiples.

La única solución posible que he venido con es esto, pero no sé si esto sería la mejor práctica

  • Inicie el administrador en un onCreate() si la preferencia "alarma iniciada" es falsa
  • Establezca alguna variable que se inicie en las preferencias.

Ahora, si la alarma se detiene por alguna razón, no hay forma de reiniciarla. Por lo tanto, una variación sería:

  • Siempre llamada cancelar en el onCreate()
  • Y luego siempre configurar la alarma.

Esto parece un patrón común: Desea obtener periódicamente información con una alarma, y ​​no establecer esa alarma más de una vez. ¿Cómo debería hacer esto? ¿Cuándo, dónde y cómo registrar la alarma?

Además, continuando con el comentario de @Zelimir: ¿ puede comprobar si ya está configurada una alarma?

Idealmente, la alarma se establecerá independientemente de la actividad que se está iniciando o no, por supuesto, pero eso podría ser otra cosa.

Para completar, este es el código que estoy utilizando actualmente para iniciar la alarma:

 AlarmManager alMan = (AlarmManager) getSystemService(Context.ALARM_SERVICE); Intent i = new Intent(this, CommentService.class); PendingIntent penInt = PendingIntent.getService(this, 0, i, 0); alMan.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), AlarmManager.INTERVAL_FIFTEEN_MINUTES, penInt); 

Para una mayor completitud, la descripción / situación de la aplicación.
La aplicación es básicamente mostrar blogs (revistas si lo desea) de una determinada página. Tiene actividades para agregar entradas, ver entradas, agregar comentarios, etc. En el sitio 'madre' hay una opción para recibir notificaciones (como el número que ves aquí en SO también cuando recibes un mensaje). Quiero mostrar si hay nuevos mensajes, y así recuperarlos cada xx minutos. Se mostraría en la barra de notificación por ahora, pero podría alimentar algún tipo de widget más tarde.

Si necesita más información: la aplicación se llama Androblip y soporta un sitio llamado blipfoto.com

¿Cuándo, dónde y cómo registrar la alarma?

Eso es imposible responder en abstracto. Depende enteramente de cuáles son las reglas de negocio para su aplicación, que rechazó proporcionar en su pregunta.

Si el monitoreo está ocurriendo todo el tiempo, un patrón típico es registrar la alarma:

  • En onCreate() de tu actividad principal para la primera ejecución de tu aplicación
  • En un BroadcastReceiver BOOT_COMPLETED , para manejar los reinicios, que limpian la lista de AlarmManager

Puede usted comprobar si una cierta alarma es allready fijada?

No, pero puede cancelarlo sin problema. Simplemente cree un equivalente PendingIntent y call cancel() en el AlarmManager .

  • Obtención de resultados de varias AsyncTasks
  • ¿Cuáles son las ventajas y desventajas de ejecutar un servicio en un proceso diferente?
  • Android: Cómo enviar la solicitud http a través del servicio cada 10 segundos
  • ¿Cuándo se llamará exactamente onServiceConnected para el servicio limitado?
  • Cómo ejecutar un servicio todos los días al mediodía, y en cada inicio
  • ¿Por qué la aplicación Android basada en Android no está instalando en el dispositivo Android basado en Asistencia-GPS (A-GPS)?
  • Cómo recoger una llamada por adb
  • Antecedentes Proceso para escanear la ubicación del usuario a intervalos regulares y actualizar la base de datos local incluso cuando la aplicación no está abierta
  • Múltiples instancias de IntentService en Android
  • Android Service nunca parece iniciar - onStartCommand () no se llama
  • Cómo enviar datos de IntentService a clase Non-Activity
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.