Intern
Was ist der Unterschied zwischen einem Hintergrunddienst und einem Hintergrunddienst in Android?
sobes.tech KI
Antwort von AI
Der Unterschied zwischen einem normalen Hintergrunddienst und einem eingeschränkten (restricted) Hintergrunddienst trat mit Android 8.0 (API 26) auf.
Normaler Hintergrunddienst:
- Kann unbegrenzt im Hintergrund laufen.
- Das System kann ihn bei Ressourcenknappheit beenden, aber er kann neu gestartet werden, wenn
START_STICKYinonStartCommand()zurückgegeben wird. - Erfordert keine sichtbaren Benachrichtigungen für den Benutzer (obwohl dies aus UX-Sicht nicht die beste Praxis ist).
- Kann erhebliche Ressourcen bei Batterie und CPU verbrauchen.
Eingeschränkter Hintergrunddienst (es gelten Einschränkungen):
- Ein im Hintergrund gestarteter Dienst ohne sichtbare Aktivitäten oder andere "Weiße Listen" (privilegierte Bedingungen) steht vor Ressourcenbeschränkungen.
- Die wichtigsten Einschränkungen umfassen:
- Einschränkung der Hintergrundausführung: Der Dienst kann vom System nach kurzer Zeit (meistens einige Minuten) gestoppt werden, nachdem die Anwendung in den Hintergrund gewechselt ist.
- Verbot, neue Hintergrunddienste zu starten: Eine Anwendung im Hintergrund kann keine neuen Hintergrunddienste mit
startService()starten. Stattdessen solltenJobScheduleroderWorkManagerverwendet werden. - Einschränkung beim Empfang von Broadcast-Nachrichten: Implizite Broadcasts im Manifest werden ignoriert. Die Anwendung muss explizit Broadcast-Empfänger registrieren oder
JobScheduler/WorkManagerverwenden, um Ereignisse zu verarbeiten.
- Das Ziel dieser Einschränkungen ist es, die Batterielaufzeit und die Geräteleistung zu verbessern, indem die irrationale Nutzung von Ressourcen durch Hintergrundanwendungen eingeschränkt wird.
Wie ein Dienst nicht eingeschränkt wird (systemseitig aktiv):
- Die Anwendung befindet sich im Vordergrund (der Benutzer interagiert aktiv mit ihr).
- Die Anwendung startet einen sichtbaren Dienst (foreground service), der eine dauerhafte Benachrichtigung anzeigt.
- Die Anwendung führt bestimmte Aufgaben aus (z.B. Verarbeitung von Broadcast-Nachrichten, Ausführung von
JobScheduler-Aufgaben), die sie vorübergehend aus dem Zustand der vollständigen irrationale Hintergrundarbeit entfernen.
Hauptunterschied: Mit Android 8.0 und höher wird ein Dienst, der im Hintergrund ohne sichtbare Aktivität des Benutzers oder sichtbaren Dienst läuft, vom System eingeschränkt hinsichtlich Ressourcen und Langzeitbetrieb. Ein "normaler Hintergrunddienst" vor Android 8.0 konnte ohne diese strengen Einschränkungen laufen.