2011-04-18 12 views
11

ja skaczę obręcze koryta (dobrze, że nie jest to skomplikowane, oczywiście), aby uniknąć zaczynając dwukrotnie alarm. Podstawowy kod wygląda następująco:Co się stanie, gdy uruchomię alarm dwukrotnie?

AlarmManager mgr=(AlarmManager)getSystemService(Context.ALARM_SERVICE); 
Intent i=new Intent(this, MyService.class); 
PendingIntent pi=PendingIntent.getService(this, 0, i, 0); 
mgr.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), AlarmManager.INTERVAL_FIFTEEN_MINUTES, pi); 

Czy to ma znaczenie, czy uruchomiłbym ten kod za każdym razem, gdy uruchomi się moja aplikacja? Nie widzę żadnych złych efektów, gdy dzwonię do tego około 10 razy jako eksperyment typu "overkill", ale nie mogę znaleźć żadnego odniesienia, czy jest to przypadek, czy oczekiwane zachowanie.

Jeśli nie jest szczególnie oczekiwać, że czuje się „złego”. Może mnie to zmusić do późniejszych kłopotów, jeśli zmieni się zachowanie AlarmManager.

Odpowiedz

13

Ponieważ sposób odwołać do AlarmManager jest w porządku z „podobnym” Intent, aby anulować alarm, możemy powiedzieć, że platforma rozpoznaje intencję daną nazwę klasy. Stąd wielokrotne wywoływanie tego nie powinno stanowić problemu, ponieważ platforma będzie wiedziała, że ​​dla takiego nieoczekiwanego zamiaru alarm już istnieje.

Oto post, który mówi coś podobnego.

+0

Hmm, dzięki! Widzę z tego pytania, że ​​"Pendingintent" jest rzeczywiście taki sam (jak mówią doktorzy). Ale czy dwukrotne wywołanie 'setInexactRepeating' z tym samym' PendingIntent' również byłoby ... nie powtarzające się? – Nanne

+0

Nie mogę znaleźć żadnego odniesienia, ale obecnie przynajmniej uruchamiam alarm dla tego samego 'PendingIntent', który nie powoduje uruchomienia więcej niż jeden raz. Myślę, że sprawdzę tylko, czy już ustawiłem. O wiele łatwiej w ten sposób. Dzięki – Nanne

+1

Czy istnieje również możliwość, że na wywołanie 'setInexactRepeating' wielokrotnie, timer alarm zostanie zresetowany? Na przykład, jeśli przerwa minęłaby 15 minut i 7 minut, to czy drugie połączenie przestawiłoby czas interwału na 0? – aandis

Powiązane problemy