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 .

  • Iniciar el servicio en el inicio y después de que se haya instalado la aplicación
  • Descargar varios archivos utilizando un servicio en android
  • ¿Qué es "Stub" y "AIDL" para en java?
  • Llamar al método getIntent en servicio
  • La mejor manera de determinar la aplicación actual (en ejecución) actual (utilizando un servicio?)
  • ¿Cómo detectar cuándo el usuario inicia otra aplicación? (Androide)
  • Android: envía los datos de la ubicación en segundo plano periódicamente (cada 30 segundos) y solicita al servidor nuevos datos
  • Android: El botón de superposición onClick nunca se llama
  • BroadcastReceiver - onReceive Not Being Called
  • No se puede iniciar el servicio Intent {cmp = com.marie.mainactivity / .BackgroundService}: no encontrado
  • Cómo iniciar la aplicación Android de sólo servicio
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.