Zwischen einer fälligen Erinnerung und ihrer Anzeige liegen mehrere Grenzen.
Das Problem: Viele Voraussetzungen, wenig Rückmeldung
App-Einwilligung, Android-Berechtigung, Benachrichtigungskanal, Hintergrundjob und Akkueinstellungen beeinflussen die Zustellung. Ein pauschales Erfolgssignal verdeckt, an welcher Stelle eine Erinnerung hängen bleibt.
Die Lösung: Bereitschaft anzeigen
Die Einstellungen zeigen diese Voraussetzungen und das letzte kontobezogene Abrufresultat. Wer die Funktion aktiviert hat, kann einen Abruf ausdrücklich auslösen. Bei einer Blockade erscheint eine Einrichtungshilfe. Fehlgeschlagene Abrufe hinterlassen einen Status mit Zeitstempel ohne Zugangsdaten.
Ein Zustellungsweg für Vordergrund und Hintergrund
Beide Abrufwege teilen sich die Zustellungslogik und eine Sperre gegen paralleles Polling. Kontowechsel, Abbruch und deaktiviertes Polling stoppen die Zustellung. Die dokumentierten Geräteprüfungen umfassen doppelte Benachrichtigungen, geänderte Fälligkeit, Kontotrennung und Abbruch.
Was geprüft ist – und was offen bleibt
Android 0.11 wurde auf dem Testgerät installiert. Eine lokale Testbenachrichtigung konnte über den gemeinsamen Zustellungsweg beobachtet werden. Das belegt noch keine pünktliche Ende-zu-Ende-Zustellung bei gesperrtem oder länger unbenutztem Telefon. Diese natürliche Hintergrundausführung bleibt im Protokoll ausdrücklich offen.
Keine Timer-Garantie aus Polling ableiten
Der dokumentierte Hintergrundabruf nutzt Android-Jobs mit einem Mindestintervall von 15 Minuten und kann später laufen. Für minutengenaue Timer ist dieser Weg ungeeignet. Gute Diagnostik zeigt diese Grenze, statt eine Zuverlässigkeit zu versprechen, die noch nicht nachgewiesen wurde.
Vom Servereintrag zur Android-Benachrichtigung
Zwischen einer fälligen Erinnerung und ihrer Anzeige liegen mehrere Grenzen. Zuerst muss das Konto angemeldet sein. Dann müssen App-Opt-in, Android-Freigabe und Benachrichtigungskanal passen. Erst danach ist ein Abruf sinnvoll. In ReminderJob prüft pollLocked diese Voraussetzungen vor dem Netzwerkzugriff. Ein fehlender Server oder eine verweigerte Freigabe werden damit nicht als leere Inbox interpretiert. Die Oberfläche zeigt Bereitschaft und den letzten Abrufzustand, sodass der Fehler einer konkreten Stufe zugeordnet werden kann. Genau diese Unterscheidung fehlte bei einem pauschalen Erfolgssignal.
Warum Vordergrund und Hintergrund dieselbe Sperre brauchen
Ein manueller Abruf kann zeitlich mit einem Android-Job zusammentreffen. Ohne gemeinsame Sperre würden beide denselben fälligen Eintrag lesen, auf noch nicht gesetzte Dedupe-Daten treffen und zwei Benachrichtigungen erzeugen. ReminderJob verwendet deshalb einen prozessweiten POLL_LOCK. Die Generation des laufenden Jobs und der gespeicherte Kontobezug werden zusätzlich geprüft. Ein Kontowechsel während der Anfrage darf nicht dazu führen, dass das Resultat im neuen Konto angezeigt wird. Die Sperre koordiniert lokale Threads; sie ist kein verteilter Server-Lock und ersetzt nicht die gespeicherte kontobezogene Deduplizierung.
private static final Object POLL_LOCK = new Object();
private static String poll(Context context,
BooleanSupplier running) throws Exception {
synchronized (POLL_LOCK) {
return pollLocked(context, running);
}
}
// Ausschnitt aus configure(): Android legt den Ausführungszeitpunkt fest.
jobs.schedule(new JobInfo.Builder(JOB_ID,
new ComponentName(context, ReminderJob.class))
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
.setPersisted(true)
.setPeriodic(15 * 60 * 1000L)
.build());Ein expliziter Abruf ist keine Zusage für den Hintergrund
Die Einstellung Erinnerungen prüfen erlaubt einen bewussten Abruf, ohne auf den nächsten OS-Job zu warten. Ein erfolgreiches Resultat dort bestätigt Anmeldung und Zustellungsweg in diesem Moment. Es sagt nicht, wann Android denselben Job bei ausgeschaltetem Bildschirm einplant. Der Job wird mit setPeriodic und einem Intervall von 15 Minuten registriert. Doze, Akkueinstellungen und die Geräteplattform können ihn später ausführen. Deshalb wird daraus kein minutengenauer Alarm gebaut. Ein Timer benötigt einen anderen, dafür vorgesehenen Mechanismus.
Technische Referenz: Android: Periodische Jobs.
Was die Geräteprüfung abgedeckt hat
Die Prüfung auf dem physischen Gerät beobachtete eine lokale QA-Benachrichtigung über den gemeinsamen Produktionsweg. Dazu kamen Doppelunterdrückung, geänderte Fälligkeit, Kontotrennung, Abbruch und deaktiviertes Polling. Ein absichtlich fehlgeschlagener Abruf hinterließ einen Zeitstempel ohne Zugangsdaten. Natürliches Ende-zu-Ende-Verhalten bei länger gesperrtem Telefon bleibt ein eigener Abnahmeschritt. Die nützliche Verbesserung ist schon jetzt greifbar: Statt „irgendwo hat es nicht funktioniert“ können wir Opt-in, Freigabe, Abruf und Anzeige einzeln untersuchen. Auch serverseitige Hintergrundläufe behandeln Arbeit und Zustellung getrennt.
Weiterlesen: Hintergrundagenten: Nach einem Neustart nicht alles wiederholen.