Nutzersystem im Vordergrund und Hintergrund

Auf Android-Mobilgeräten können Sie die App dank der Unterstützung mehrerer Nutzer im Hintergrund (wenn ein anderer Nutzer aktiv ist) und im Vordergrund (auch als aktueller Nutzer bezeichnet) ausführen. Um bei Bedarf Ressourcen zu sparen, verwaltet das System das Herunterfahren von Nutzern. Es ist immer ein Nutzer im Vordergrund erforderlich.

Ab Android 10 können unter Android Automotive standardmäßig nur drei Nutzer gleichzeitig ausgeführt werden (config_multiuserMaxRunningUsers). Daher können neben dem headless-Systemnutzer (Nutzer 0) nur ein Nutzer im Vordergrund und ein Nutzer im Hintergrund konfiguriert werden.

  • Normalerweise wird der aktuelle Nutzer im Vordergrund und der headless Systemnutzer (Nutzer 0) im Hintergrund ausgeführt. Wenn ein Nutzer in den Hintergrund verschoben wird, wird er angehalten, aber nicht gesperrt. Wenn die maximale Anzahl von Nutzern erreicht ist, wird der zuletzt am wenigsten verwendete Hintergrundnutzer angehalten und gesperrt (config_multiuserDelayUserDataLocking).
  • Gestoppte und entsperrte Hintergrundnutzer werden während des Garagentormodus neu gestartet.

Gastnutzer sind temporär und können nur im Vordergrund ausgeführt werden. Wenn eine Person den Gastzugriff beendet, wird der Gastnutzer beendet und kann nicht mehr im Hintergrund ausgeführt werden.

Hintergrundprozesse von Nutzern

Wenn ein Nutzer vom Vordergrund in den Hintergrund wechselt (und umgekehrt), werden alle Aktivitäten und Dienste im Vordergrund für diesen Nutzer beendet. Dadurch werden alle Dienste angehalten, die über diese Dienste gebunden sind. Es gibt jedoch noch einige Dinge zu tun. Dauerhafte Dienste von selbst erhobenen Daten und OEM-System-Apps werden so lange ausgeführt, wie der (jetzt im Hintergrund laufende) Nutzer nicht beendet wird.

Dauerhafte Dienste sind problematischer, da sie im OOM-Verwaltungssystem (Out of Memory) von Android in einem Bucket mit hoher Priorität enthalten sind. Auch wenn Apps für den Nutzer im Vordergrund mehr Arbeitsspeicher benötigen, werden diese persistenten Hintergrundprozesse nicht beendet. Aus Sicht des Nutzers im Vordergrund belegen die persistenten Dienste also dauerhaft einen bestimmten Arbeitsspeicherplatz, der erst wieder freigegeben wird, wenn ein Nutzer das Auto neu startet und alle Nutzer im Hintergrund beendet werden.

Nutzerstatus

Ein Nutzer befindet sich im Status „Angehalten“ (STATE_SHUTDOWN), bis er gestartet wird. Wenn Anmeldedaten für einen Nutzer (z. B. eine PIN) festgelegt sind, wird der Android-Nutzer ausgeführt, bleibt aber gesperrt (STATE_RUNNING_LOCKED), bis eine Person den Sperrbildschirm für diesen Nutzer entsperrt. Wenn der Nutzer entsperrt wird, wird der verschlüsselte Speicher für Anmeldedaten entschlüsselt und die Datenverzeichnisse für diesen Nutzer werden verfügbar. Bei einem normalen Nutzerwechsel wird der Nutzer im Hintergrund nicht angehalten und bleibt aktiv und entsperrt (STATE_RUNNING_UNLOCKED), nachdem er entsperrt wurde.

Garagenmodus, JobScheduler und App-Updates für Nutzer

Für die Aktualisierung von Daten in Automotive-Apps wird empfohlen, JobScheduler zu verwenden, um Jobs über den Garage Mode zu planen, die ausgeführt werden, wenn sich ein Gerät im Ruhemodus befindet (z. B. zum Herunterladen von App-Updates von Google Play). Nachdem Apps Jobs bei JobScheduler und JobSchedulerService registriert haben, werden die Jobs nach Möglichkeit ausgeführt.

CarService sendet ein Signal an JobSchedulerService, um Jobs auszulösen, die ausgeführt werden sollen, wenn das Automotive-Gerät im Garagenmodus inaktiv ist. Damit JobSchedulerService Jobs für einen Nutzer im Hintergrund ausführen kann, muss dieser Nutzer den Status STATE_RUNNING_UNLOCKED haben. Jobs, die in JobSchedulerService anstehen, werden beibehalten und überstehen mehrere Ein-/Ausschaltzyklen.

JobScheduler kann keine Jobs für einen bestimmten Nutzer ausführen, wenn der Nutzer nach einem Neustart nie entsperrt wurde. Wenn der Nutzer jedoch entsperrt ist und sich in STATE_RUNNING_UNLOCKED befindet, können Jobs für ihn ausgeführt werden.