In meiner Android-Anwendung muss ich eine Minute eine Nachricht an den Server senden (im Grunde ein Ping), wenn eine bestimmte Funktion aktiviert ist. Die Funktion kann für 2-3 Stunden aktiviert werden, daher ist es wichtig, dass der Ping kontinuierlich und zeitnah gesendet wird.Wie wird ein Ping einmal pro Minute zuverlässig an den Server gesendet?
Um dies zu erreichen, verwende ich derzeit AsyncTasks (zum Senden der Anfrage), die einmal pro Minute über einen Vordergrund-Service gestartet werden, der mit setManager setExactAndAllowWhileIdle geplant ist. Der Vordergrund-Dienst hat auch eine teilweise wakelock!
Leider sieht es aus wie Marshmallows Doze-Modus schluckt die Alarme an einem beliebigen Punkt. Dies geschieht JEDERZEIT und an beliebigen Stellen. Manchmal sendet die App Pings für 2 Stunden ohne Probleme, manchmal nur für 30 Minuten, bevor sie nicht mehr ausgehen (und dann 10-15 Minuten später neu gestartet werden).
Was kann ich tun, um den Ping kontinuierlich zu erhalten? Es ist unglaublich wichtig für die App. Die einzige andere Alternative, die ich sehen kann, ist, dass ich das GCM dazu nutze, alle fünf Minuten Nachrichten mit hoher Priorität zu senden, um sie am Leben zu erhalten, aber das wäre ein schrecklicher Hack.
Das Hinzufügen der App zur Optimierungs-Whitelist wird nicht helfen, da Sie in 9 Minuten nicht mehr als ein Wakeup erhalten. – rastik