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 vinculación al servicio que ya fue iniciada por BroadcastReceiver crea una nueva instancia de servicio
- Android: estado de la aplicación cuando la aplicación está fuera de pila debido a limitación de memoria
- Utilizar IExtendedNetworkService para obtener respuesta de USSD en Android
- Enviar datos de Servicio a mi actividad
- No se pudo encontrar la clase SoapObject
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
- ¿Existe un equivalente GCM de Android para el servicio de comentarios de emisión Push de iOS?
- Las preferencias compartidas a veces se eliminan
- Vista web de Android dentro de un servicio?
- El servicio no se detendrá cuando el método stopService se llame
- Cómo obtener respuesta del código USSD de Android?
- ¿Por qué no se inicia el servicio después de BOOT_COMPLETED?
- Puntero nulo en getApplicationContext ()
- ¿Comunicación Bluetooth en hilo o servicio en Android?
¿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 deAlarmManager
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
.
- Cómo resaltar fechas de calendario cuáles fechas provienen de la base de datos
- Pasar un fd int nativo a FFMPEG desde un URI abierto