usando tutorial studio programar pendingintent notification alarma android alarmmanager android-alarms

android - studio - tutorial alarmmanager



Diferencia entre setRepeating y setInexactRepeating de AlarmManager (4)

Ambos ejemplos programan una alarma de repetición que enviará el alarmIntent dado. En ambos casos, la primera vez que se envíe será inmediata ( calendar.getTimeInMillis() devuelve la hora actual ). En ambos casos, el dispositivo se activará cuando sea necesario enviar la alarma (como lo demuestra AlarmManager.RTC_WAKEUP ).

Hay dos diferencias entre estas llamadas. La más simple es que la intención se enviará cada quince minutos en la primera llamada y todos los días en la segunda llamada (como se puede ver en el tercer parámetro). La diferencia más complicada es la llamada a la función en sí misma: setRepeating programará la primera alarma exactamente cada quince minutos; setInexactRepeating programará la segunda alarma aproximadamente cada 24 horas, lo que significa que podría desviarse de ese intervalo, con la ventaja de consumir menos energía.

Tenga en cuenta que esto ha cambiado en la API 19, donde estas dos llamadas son sinónimos. Consulta esta guía y la documentación de esta API .

¿Cuáles son los parámetros de los siguientes:

alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_FIFTEEN_MINUTES, alarmIntent);

Y de los siguientes:

alarmMgr.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, alarmIntent);

¿Cuál es la diferencia y también en qué se diferencian los dos en términos de funcionalidad?


Para aumentar las respuestas anteriores, hay una serie de otras mejores prácticas que se deben tener en cuenta al usar alarmas repetitivas, especialmente las alarmas inexactas solicitadas usando setInexactRepeating() .

Tipo de alarma

  • Las alarmas que no son de WAKEUP son mejores que las de WAKEUP desde la perspectiva de la administración de energía. El uso de la alarma anterior puede disparar tarde, pero aún así se activará cuando el usuario despierte el dispositivo o cuando se active otra alarma de activación. El uso de las alarmas WAKEUP despertará el dispositivo, lo que consumirá una batería adicional y posiblemente provocará el disparo de otras alarmas inexactas que se retrasaron y que de lo contrario se podrían haber demorado más (reduciendo los beneficios de dosificación de ahorro de energía que ofrecen las alarmas inexactas).
  • Prefiera las alarmas utilizando la base de tiempo ELAPSED en lugar de la base de tiempo RTC. Es más probable que los primeros tengan una distribución más aleatoria entre los dispositivos que las alarmas RTC, lo que reduce el riesgo de congestión de la red y en el servidor si la alarma está activando algún tipo de encuesta. Los teléfonos que ejecutan Gingerbread (o mayores) sufren un error por el cual las alarmas inexactas de RTC tienden a alinearse estrechamente con el reloj de tiempo real, por ejemplo, aproximadamente 30 segundos después de cada cuarto de hora. Las alarmas ELAPSED no sufren este error en estas versiones anteriores de la plataforma. Incluso si su alarma no desencadena ninguna actividad de la red, recuerde que si se trata de una alarma de activación, puede activar otros intentos de alarma que no se activan y que pueden llegar a la red.

Base de tiempo

  • Tenga cuidado de especificar la hora de inicio solicitada en el dominio de hora correcto para el tipo de alarma. Si no lo hace, las alarmas se configurarán en el pasado (se activarán de inmediato) si se configura una alarma RTC con una base de tiempo ELAPSED o en el futuro si se configura una alarma ELAPSED utilizando la base de tiempo RTC. Puede verificar qué alarmas ha programado una aplicación usando la dumpsys alarm través del adb shell .

Intervalo

  • La especificación de un intervalo de alarma inexacto de cualquier otra cosa que no sean las constantes de intervalo definidas en el AlarmManager API es redundante en el SDK <19: se programarán como alarmas exactas no inexactas, perdiendo todos los beneficios de ahorro de energía que brindan las alarmas inexactas.

Edición: aquí hay una explicación más detallada del error relacionado con los dispositivos gingerbread y honeycomb 3.0: https://code.google.com/p/android/issues/detail?id=31550


Decida qué tan precisa debe ser su alarma

Elegir el tipo de alarma es a menudo el primer paso para crear una alarma. Otra distinción es la precisión con la que necesita que su alarma sea.

Para la mayoría de las aplicaciones, setInexactRepeating() es la opción correcta. Cuando utiliza este método, Android sincroniza múltiples alarmas de repetición inexactas y las dispara al mismo tiempo . Esto reduce el drenaje de la batería.

Para las aplicaciones raras que tienen requisitos de tiempo rígidos como ejemplo, la alarma debe dispararse a las 4:00 pm todos los días y luego usar setRepeating() .

Referencia: Decida cuán precisa debe ser su alarma.


setRepeating es más preciso y setInexactRepeating es para ahorrar batería pero no precisa , setInexactRepeating es bueno para el mantenimiento en segundo plano, por ejemplo, y setRepeating es necesario, por ejemplo, para el despertador.