2012-12-25 8 views
6

Meine App legt einen wiederholten Alarm bei Benutzerinteraktion fest, möglicherweise ändert sich die Intervallzeit, die für die Übertragung mit dem Alarmmanager festgelegt wurde, .
Es gibt nicht viele Extras.
Ist in diesem Fall das Update- oder Cancel-Flag besser?FLAG_CANCEL_CURRENT oder FLAG_UPDATE_CURRENT

Dank

+0

Was bedeutet "Es gibt nicht viele Extras"? Verwenden Sie Extras oder nicht? –

+0

nein, ich verwende keine Extras .. – Dory

+0

Seien Sie gewarnt, dass Samsung Lollipop Problem hat, wenn man FLAG_CANCEL_CURRENT verwendet. Bezieht sich auf http://stackoverflow.com/questions/29344971/java-lang-securityexception-too-many-alarms-500-registered-from-pid-10790-u – Elye

Antwort

11

Wenn Sie nicht Extras verwenden, müssen Sie keine dieser Flags angeben. Sie ändern nur, wie die Systeme Extras mit einer PendingIntent behandeln: Ersetzen Sie diejenigen in der aktuellen Übereinstimmung (zwischengespeichert durch das System PendingIntent) oder stornieren Sie es und erstellen Sie eine neue. Einzelheiten finden Sie in der Dokumentation: http://developer.android.com/reference/android/app/PendingIntent.html#FLAG_CANCEL_CURRENT

+0

Okay, ich habe es ... Vielen Dank ..! – Dory

+0

Da er nicht CANCEL benötigt, ist 'FLAG_UPDATE_CURRENT' der richtige Weg - sonst entsteht der unnötige Aufwand, ein neues Objekt zu erstellen. –

+0

Außerdem kann die Verwendung von CANCEL zu 'PendingIntent.CanceledException' führen. –

6

Nie Verwenden Sie FLAG_CANCEL_CURRENT mit PendingIntents, die Sie beim Einstellen von Alarmen verwenden. Wenn Sie den Alarm für eine andere Zeit neu planen möchten, benötigen Sie überhaupt keine Markierung. Erstellen Sie einfach ein Duplicate PendingIntent mit Flags von Null und verwenden Sie es dann, um() einen Alarm zu setzen: Dies wird den bestehenden Alarm implizit löschen und ihn dann für die neu spezifizierte Zeit setzen. Wenn Sie jedoch FLAG_CANCEL_CURRENT beim Erstellen des neuen PendingIntents verwendet haben, wird die Fähigkeit des Alarm-Managers unterbrochen, zu erkennen, dass er "derselbe" ist wie der jetzt abgebrochene PendingIntent, und dass der alte nicht verfügbar ist und Speicher belegt und CPU. Ich habe gesehen, dass Apps mit diesem Fehler im System buchstäblich Hunderte von abgestandenen Alarmen ausgelöst haben, genug, um eine spürbare Leistung und Speicherauslastung zu erzielen.

Wenn Sie nur die Extras ändern möchten, ohne den vorhandenen Alarm neu zu terminieren, dafür ist FLAG_UPDATE_CURRENT zuständig. Wenn Sie eine neue Planung durchführen möchten, verwenden Sie überhaupt keine Flags.