2011-04-18 11 views
11

Sto saltando i cerchi (beh, non è così complicato) per evitare di avviare un allarme due volte. Il codice di base è il seguente:Cosa succede quando avvio una sveglia due volte?

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); 

Sarebbe importante se eseguissi effettivamente questo codice ogni volta che viene avviata la mia app? Non vedo alcun effetto negativo quando si chiama questo circa 10 volte come un esperimento di overkill, ma non riesco a trovare alcun riferimento se questa è una coincidenza o un comportamento previsto.

Se non è previsto in particolare, sembra "sbagliato". Potrebbe mettermi nei guai più tardi se il comportamento delle modifiche AlarmManager.

risposta

13

Poiché il metodo di annullamento per AlarmManager va bene con un 'simile' Intento per annullare l'allarme, possiamo dire che la piattaforma riconosce l'intento dato il nome della classe. Quindi chiamarlo ripetutamente non dovrebbe essere un problema poiché la piattaforma saprà che per un tale tentativo in sospeso esiste già un allarme.

Ecco un post che parla qualcosa di simile.

+0

Hmm, grazie! Da questa domanda vedo che il 'Pendenteintent' è in effetti lo stesso (come dicono i documenti). Ma chiamare anche 'setInexactRepeating' con lo stesso' PendingIntent' due volte sarà ... non ripetibile? – Nanne

+0

Non riesco a trovare alcun riferimento, ma attualmente almeno l'avvio di un allarme per lo stesso 'PendingIntent' non lo fa innescare più di una volta. Penso che mi limiterò a controllare se lo avrò già impostato. Molto più facile in questo modo. Grazie – Nanne

+1

C'è anche la possibilità che richiamando 'setInexactRepeating' più volte, il timer della sveglia venga resettato? Come se l'intervallo fosse stato di 15 minuti e 7 minuti fossero passati, allora una seconda chiamata avrebbe azzerato l'intervallo a 0? – aandis

Problemi correlati