Quels sont les paramètres des éléments suivants:
alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
AlarmManager.INTERVAL_FIFTEEN_MINUTES, alarmIntent);
Et parmi les suivants:
alarmMgr.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
AlarmManager.INTERVAL_DAY, alarmIntent);
Quelle est la différence et comment les deux sont-ils différents en termes de fonctionnalités?
Les deux exemples planifient une alarme répétitive qui enverra le alarmIntent
donné. Dans les deux cas, la première fois qu'il sera envoyé sera immédiat (calendar.getTimeInMillis()
renvoie l'heure actuelle ). Dans les deux cas, l'appareil sera réveillé lorsque l'alarme doit être envoyée (comme le montre AlarmManager.RTC_WAKEUP
).
Il existe deux différences entre ces appels. Le plus simple est que l'intention sera envoyée toutes les quinze minutes lors du premier appel, et tous les jours lors du deuxième appel (comme vous pouvez le voir dans le troisième paramètre). La différence la plus compliquée est l'appel de la fonction elle-même: setRepeating
programmera la première alarme pour exactement toutes les quinze minutes; setInexactRepeating
programmera la deuxième alarme pour environ toutes les 24 heures, ce qui signifie qu'elle pourrait s'écarter de cet intervalle - avec l'avantage de consommer moins d'énergie .
Notez que cela a changé dans l'API 19, où ces deux appels sont synonymes. Voir ce guide , et cette documentation API .
Décidez de la précision de votre alarme
Le choix du type d'alarme est souvent la première étape de la création d'une alarme. Une autre distinction est la précision de votre alarme.
Pour la plupart des applications, setInexactRepeating()
est le bon choix. Lorsque vous utilisez cette méthode, Android synchronise plusieurs alarmes répétitives inexactes et les déclenche en même temps . Cela réduit la décharge de la batterie.
Pour l'application rare qui a des exigences de temps rigides comme exemple, l'alarme doit se déclencher avec précision à 16h00. tous les jours puis utilisez setRepeating()
.
Référence: Décidez de la précision de votre alarme
Pour augmenter les réponses précédentes, il existe un certain nombre d'autres bonnes pratiques à prendre en compte lors de l'utilisation d'alarmes répétitives, en particulier les alarmes inexactes demandées à l'aide de setInexactRepeating()
.
Type d'alarme
Base de temps
dumpsys alarm
via le adb Shell
.Intervalle
Edit: voici plus d'explications sur le bug relatif aux appareils Gingerbread et honeycomb 3.0: https://code.google.com/p/Android/issues/detail?id=3155
setRepeating est plus précis et setInexactRepeating sert à économiser la batterie mais pas précis, setInexactRepeating est bon pour la maintenance en arrière-plan par exemple et setRepeating est nécessaire par exemple pour le réveil.