Grundsätzlich bin ich stecken, weil die "Verbesserungen" in der Batterie in Android 6.0 + hinzugefügt. Meine App unterstützt API von 11+Richtige Art des Laufens IntentService alle x Minuten in Android, dösen inbegriffen
Szenario
Hier ist mein Szenario: meine App holt Daten von einem Web-Service eines 3rd-Party-Server. Da es nicht mein Server ist, habe ich keine Kontrolle darüber, wann Daten hinzugefügt oder entfernt werden. Die Verfügbarkeit der Daten ist unterschiedlich. Ich möchte in der Lage sein, einen IntentService zu feuern, um die Daten zu holen, zum Beispiel alle 30/60 Minuten für die nächsten 6 Stunden. Auf diese Weise können die Daten in meiner App den Fall abdecken, wenn die Daten vom Server nicht mehr verfügbar sind. Natürlich muss das gehen, auch wenn meine App geschlossen ist.
Sie können sagen, dass dies nicht mit der Batterie freundlich ist, aber es ist eine Option für Power-User zur Hand haben.
Was habe ich bisher
Ich habe viel mit der Einstellung Alarms
zu kämpfen. Während das Einstellen eines sich wiederholenden Alarms der einfachste und bequemste Weg war, es zu funktionieren, erwies es sich als zuverlässig bis nur android 5.0.
Beginnend mit der Einführung von Doze
, nach der Dokumentation, die Alarme werden auf maintenance window
verschoben und da diese Fenster um 1-2-4 und so auf Stunden kommen, ist es nicht für meine Bedürfnisse geeignet.
Ich gab die Verwendung von Set repeating
auf und versuchte, eine einmalige Alarm
zu verwenden, die innerhalb der IntentService
Ausführung neu geplant wird. Von Test setExact
schien nicht gut zu laufen, aber dann versucht setExactAndAllowWhileIdle
, die tatsächlich im richtigen Moment feuern, aber wenn in Doze
Modus, hat es keine Netzwerk-Konnektivität Zugriff, so dass es nutzlos.
Trotzdem bin ich nicht sicher, was passiert, wenn ein Alarm mit setRepeating
oder setExact
verzögert wird, aber das Gerät ist vor dem nächsten Wartungsfenster wecken ...
Grundsätzlich jetzt ich stecken bin, mit einem Mechanismus, der nicht der Fall ist Arbeit und ich weiß nicht, was sonst zu wählen angesichts der Android-Versionen von der App und den Anforderungen unterstützt.
LE: eigentlich bin ich mir nicht bewusst, eine nette Art und Weise Hintergrundjobs auf Android einzustellen, sogar ohne Doze. Ich meine, wir haben die JobScheduler
, die scheint eine nette Sache zu tun ... aber hey, es ist nur auf Android 21 und nicht rückwärts unterstützt ... ich meine wirklich, eine einfache Sache zu tun, und ich warte schon ein paar Tage bis jetzt.
Danke, 'setAlarmClock' scheint die einzige echte Option zu sein, aber in der Tat ist es ein, aber außerhalb des Umfangs. – Alin