Obsługa systemu użytkownika na pierwszym planie i w tle

W mobilnym systemie Android obsługa wielu Użytkowników umożliwia Użytkownikom działanie w tle (kiedy aktywny jest inny Użytkownik) i na pierwszym planie (zwanym także bieżącym Użytkownikiem). Aby w razie potrzeby oszczędzać zasoby, system zarządza zamykaniem użytkowników. Zawsze wymagany jest jeden użytkownik na pierwszym planie .

Począwszy od Androida 10, Android Automotive ma domyślną konfigurację zezwalającą na działanie maksymalnie trzem użytkownikom jednocześnie ( config_multiuserMaxRunningUsers ). Dlatego też oprócz użytkownika systemu bezgłowego (Użytkownik 0) można skonfigurować tylko jednego użytkownika pierwszego planu i jednego użytkownika tła.

  • W typowych okolicznościach bieżący użytkownik działa na pierwszym planie, a użytkownik systemu bezgłowego (Użytkownik 0) działa w tle. Gdy Użytkownik zostanie przeniesiony do tła, zostaje on zatrzymany, ale nie zablokowany. Kiedy zostanie osiągnięta maksymalna liczba użytkowników, ostatnio używany użytkownik w tle zostanie zatrzymany i zablokowany ( config_multiuserDelayUserDataLocking ).
  • Zatrzymani i odblokowani użytkownicy w tle są uruchamiani ponownie w trybie garażowym .

Użytkownicy-goście są efemeryczni i mogą działać tylko na pierwszym planie. Gdy dana osoba wyłączy się z trybu Gość, użytkownik-Gość zostanie zatrzymany i nie będzie mógł działać w tle.

Procesy użytkownika w tle

Kiedy nastąpi przełączenie Użytkownika z pierwszego planu na drugi (i odwrotnie), wszystkie działania i usługi pierwszoplanowe dla tego Użytkownika zostaną zakończone. Prowadzi to do wstrzymania wszystkich usług powiązanych z tymi usługami. Pozostaje jednak trochę sprzątania. Stałe usługi z aplikacji systemowych innych firm i aplikacji systemowych OEM działają tak długo, jak długo użytkownik (teraz działający w tle) nie zostanie zatrzymany.

Usługi trwałe są bardziej problematyczne, ponieważ są one zawarte w zasobniku o wysokim priorytecie w systemie zarządzania brakiem pamięci (OOM) systemu Android. Nawet jeśli aplikacje dla użytkownika na pierwszym planie wymagają więcej pamięci, te trwałe procesy w tle nie zostaną zakończone. W rezultacie, z punktu widzenia Użytkownika pierwszoplanowego, stałe Usługi na stałe zajmują pewną ilość pamięci, która jest zwracana tylko wtedy, gdy ktoś ponownie uruchomi samochód, a Użytkownicy działający w tle zostaną zatrzymani.

Stan użytkownika

Użytkownik jest w stanie zatrzymania ( STATE_SHUTDOWN ), dopóki użytkownik nie zostanie uruchomiony. Jeśli ustawione jest poświadczenie użytkownika (takie jak PIN), użytkownik systemu Android działa, ale pozostaje zablokowany ( STATE_RUNNING_LOCKED ), dopóki inna osoba nie odblokuje ekranu blokady dla tego użytkownika. Kiedy Użytkownik zostanie odblokowany, jego zaszyfrowany magazyn danych uwierzytelniających zostanie odszyfrowany i katalogi danych tego Użytkownika staną się dostępne. W przypadku typowego przełączania użytkowników, użytkownik działający w tle nie jest zatrzymywany i po odblokowaniu pozostaje uruchomiony i odblokowany ( STATE_RUNNING_UNLOCKED ).

Tryb garażowy, JobScheduler i aktualizacje aplikacji dla użytkowników

Zalecaną techniką aktualizowania danych przez aplikacje samochodowe jest użycie narzędzia JobScheduler do zaplanowania uruchamiania zadań, gdy urządzenie znajduje się w stanie bezczynności, w trybie garażowym (na przykład pobieranie aktualizacji aplikacji ze sklepu Google Play). Gdy aplikacje zarejestrują zadania w JobScheduler i JobSchedulerService, zadania zostaną uruchomione, jeśli to możliwe.

CarService wysyła sygnał do JobSchedulerService w celu uruchomienia zadań ustawionych do uruchomienia, gdy urządzenie samochodowe jest bezczynne w trybie garażowym. Aby usługa JobSchedulerService mogła uruchamiać zadania dla użytkowników działających w tle, ten użytkownik musi znajdować się w stanie STATE_RUNNING_UNLOCKED . Zadania umieszczone w kolejce w JobSchedulerService są utrwalane i przetrwają nawet po wyłączeniu zasilania.

JobScheduler nie może uruchomić zadań dla konkretnego Użytkownika, jeśli Użytkownik nigdy nie został odblokowany po wyłączeniu zasilania. Jednakże po odblokowaniu i jeśli Użytkownik pozostanie w STATE_RUNNING_UNLOCKED , można uruchomić zadania dla Użytkownika.