Différence entre setRepeating et setInexactRepeating de AlarmManager
Quels sont les paramètres des éléments suivants:
alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
AlarmManager.INTERVAL_FIFTEEN_MINUTES, alarmIntent);
Et de ce qui suit:
alarmMgr.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
AlarmManager.INTERVAL_DAY, alarmIntent);
Quelle est la différence et comment sont les deux différents en termes de fonctionnalité?
Vous devez vous connecter pour publier un commentaire.
Les deux exemples de programmer une répétition de l'alarme qui va envoyer les donné
alarmIntent
. Sur les deux cas, la première fois qu'il est envoyé sera immédiate (calendar.getTimeInMillis()
retourne à l'heure actuelle). Sur les deux cas, l'appareil sera réveillé lorsque l'alarme doit être envoyé (comme en témoigne parAlarmManager.RTC_WAKEUP
).Il y a deux différences entre ces appels. Le plus simple c'est que l'objectif sera envoyé toutes les quinze minutes sur le premier appel, et tous les jours sur le second appel (comme vous pouvez le voir dans le troisième paramètre). Le plus compliqué différence, c'est l'appel de la fonction elle-même:
setRepeating
de planifier la première alarme pour exactement toutes les quinze minutes;setInexactRepeating
horaire du deuxième alarme pour environ toutes les 24 heures, ce qui signifie qu'il pourrait le faire dévier de cet intervalle - l'avantage de consommer moins d'énergie.Faire remarquer que ce qui a changé dans l'API 19, où ces deux appels sont synonymes. Voir ce guide, et cette documentation de l'API.
setRepeating()
correspond au comportement desetInexactRepeating()
uniquement lorsquetargetSdkVersion
est de 19. Pour moinstargetSdkVersion
, leurs comportements diffèrent.alarmIntent
, l'appareil va rester éveillé. Si vous êtes à quitter le contexte, le dispositif pourrait aller de nouveau au sommeil. Ainsi, par exemple, si votrealarmIntent
démarre une activité, il est certain que l'appareil sera éveillé de l'activité pour gérer l'intention. Mais ensuite, si vous voulez démarrer un service à partir de votre activité en appelantstartService()
, alors oui - vous devez prendre un sillage de verrouillage pour s'assurer que le service démarre. Voir la pour un exemple.Décider de la façon précise votre alarme doit être
De choisir le type d'alarme est souvent la première étape dans la création d'une alarme. Une distinction supplémentaire est le degré de précision vous avez besoin de votre alarme.
Pour la plupart des applications,
setInexactRepeating()
est le bon choix. Lorsque vous utilisez cette méthode, Android synchronise plusieurs inexact de répéter les alarmes incendies et en même temps. Cela réduit la consommation de la batterie.Pour les rares application rigide des exigences en temps à titre d'exemple, l'alarme doit incendie précisément à 4:00 heures tous les jours alors utiliser
setRepeating()
.Référence: Décider de la façon précise votre alarme doit être
setRepeating()
. Je vous remercie.Pour augmenter les réponses précédentes, il y a un certain nombre d'autres bonnes pratiques à prendre en considération lors de l'utilisation de répéter les alarmes, particulièrement inexact alarmes demandé l'aide de
setInexactRepeating()
.Type D'Alarme
Base de temps
dumpsys alarm
via leadb shell
.Intervalle
Edit: voici une explication plus détaillée des bug relatif à gingerbread et honeycomb 3.0 périphériques: https://code.google.com/p/android/issues/detail?id=31550
setRepeating est plus précis et setInexactRepeating est pour économiser la batterie, mais pas de précision , setInexactRepeating est bon pour la maintenance en arrière-plan pour l'exemple et setRepeating est nécessaire par exemple pour le réveil .