Handhabung des Benutzersystems im Vordergrund und im Hintergrund

In mobilen Android-Geräten ermöglicht die Unterstützung mehrerer Benutzer, dass Benutzer im Hintergrund (wenn ein anderer Benutzer aktiv ist) und im Vordergrund (auch als aktueller Benutzer bezeichnet) ausgeführt werden. Um bei Bedarf Ressourcen zu sparen, verwaltet das System das Herunterfahren von Benutzern. Es ist immer ein Vordergrundbenutzer erforderlich .

Ab Android 10 verfügt Android Automotive über eine Standardkonfiguration, die die gleichzeitige Ausführung von maximal drei Benutzern zulässt ( config_multiuserMaxRunningUsers ). Daher können zusätzlich zum Headless-Systembenutzer (Benutzer 0) nur ein Vordergrundbenutzer und ein Hintergrundbenutzer konfiguriert werden.

  • Unter typischen Umständen läuft der aktuelle Benutzer im Vordergrund und der Benutzer des Headless-Systems (Benutzer 0) im Hintergrund. Sobald ein Benutzer in den Hintergrund verschoben wird, wird der Benutzer gestoppt, aber nicht gesperrt. Wenn die maximale Anzahl von Benutzern erreicht ist, wird der zuletzt verwendete Hintergrundbenutzer gestoppt und gesperrt ( config_multiuserDelayUserDataLocking ).
  • Gestoppte und entsperrte Hintergrundbenutzer werden im Garagenmodus neu gestartet.

Gastbenutzer sind kurzlebig und können nur im Vordergrund ausgeführt werden. Wenn eine Person den Gast verlässt, wird der Gastbenutzer gestoppt und kann nicht im Hintergrund ausgeführt werden.

Benutzerprozesse im Hintergrund

Wenn der Benutzer vom Vordergrund in den Hintergrund wechselt (und umgekehrt), werden alle Aktivitäten und Vordergrunddienste für diesen Benutzer beendet. Dies führt zur Einstellung aller von diesen Diensten abhängigen Dienste. Es müssen jedoch noch einige Aufräumarbeiten durchgeführt werden. Persistente Dienste von Erstanbieter- und OEM-System-Apps werden weiterhin ausgeführt, solange der (jetzt Hintergrund-)Benutzer nicht gestoppt wird.

Persistente Dienste sind problematischer, da diese Dienste in einem Bucket mit hoher Priorität im Out of Memory (OOM)-Verwaltungssystem von Android enthalten sind. Auch wenn Apps für den Vordergrundbenutzer mehr Speicher benötigen, werden diese persistenten Hintergrundprozesse nicht beendet. Aus Sicht des Vordergrundbenutzers beanspruchen die persistenten Dienste daher dauerhaft eine gewisse Menge an Speicher, und dieser Speicher wird nur dann zurückgegeben, wenn eine Person das Auto neu startet und alle Hintergrundbenutzer gestoppt werden.

Benutzerstatus

Ein Benutzer befindet sich in einem gestoppten Zustand ( STATE_SHUTDOWN ), bis der Benutzer gestartet wird. Wenn Benutzeranmeldeinformationen (z. B. eine PIN) festgelegt sind, wird der Android-Benutzer ausgeführt, bleibt jedoch gesperrt ( STATE_RUNNING_LOCKED ), bis eine Person den Sperrbildschirm für diesen Benutzer entsperrt. Wenn der Benutzer entsperrt wird, wird sein verschlüsselter Anmeldedatenspeicher entschlüsselt und die Datenverzeichnisse für diesen Benutzer werden verfügbar. Bei einem typischen Benutzerwechsel wird der Hintergrundbenutzer nicht gestoppt und bleibt aktiv und entsperrt ( STATE_RUNNING_UNLOCKED ), sobald er entsperrt ist.

Garagenmodus, JobScheduler und App-Updates für Benutzer

Die empfohlene Technik für Automotive-Apps zum Aktualisieren von Daten besteht darin, JobScheduler zu verwenden, um die Ausführung von Jobs zu planen, wenn sich ein Gerät im Ruhezustand befindet, und zwar über den Garagenmodus (z. B. das Herunterladen von App-Updates aus dem Google Play Store). 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 Hintergrundbenutzer ausführen kann, muss sich dieser Benutzer im Status STATE_RUNNING_UNLOCKED befinden. In JobSchedulerService eingereihte Aufträge bleiben bestehen und bleiben auch nach Stromzyklen bestehen.

JobScheduler kann keine Jobs für einen bestimmten Benutzer ausführen, wenn der Benutzer nach einem Aus- und Wiedereinschalten nie entsperrt wurde. Sobald die Sperre jedoch aufgehoben ist und der Benutzer im STATE_RUNNING_UNLOCKED bleibt, können Aufträge für den Benutzer ausgeführt werden.