Obsługa systemu użytkownika na pierwszym i drugim planie

W przypadku urządzeń mobilnych z Androidem obsługa wielu użytkowników umożliwia uruchamianie aplikacji w tle (gdy aktywny jest inny użytkownik) i na pierwszym planie (czyli obecny użytkownik). Aby oszczędzać zasoby, system zarządza wyłączaniem użytkowników. Zawsze wymagany jest 1 użytkownik na pierwszym planie.

Począwszy od Androida 10 domyślna konfiguracja Androida Automotive pozwala na uruchamianie maksymalnie 3 użytkowników naraz (config_multiuserMaxRunningUsers). Oznacza to, że oprócz bezgłowy użytkownik systemu (użytkownik 0) może być skonfigurowany tylko 1 użytkownik na pierwszym i 1 na drugim planie.

  • W typowych okolicznościach bieżący użytkownik działa na pierwszym planie, a bezgłowy użytkownik systemu (użytkownik 0) działa w tle. Gdy użytkownik zostanie przeniesiony na drugi plan, zostanie zatrzymany, ale nie zablokowany. Gdy osiągnięta zostanie maksymalna liczba użytkowników, ostatnio używany użytkownik w tle zostanie zatrzymany i zablokowany (config_multiuserDelayUserDataLocking).
  • Zatrzymane i odblokowane procesy w tle są ponownie uruchamiane w ramach trybu garażu.

Użytkownicy goście są tymczasowi i mogą działać tylko w tle. Gdy użytkownik przełączy się z trybu gościa, użytkownik gościnny zostanie zatrzymany i nie będzie można go uruchomić w tle.

Procesy użytkownika w tle

Gdy użytkownik przejdzie z pierwszego planu na drugi (i odwrotnie), wszystkie czynności i usługi na pierwszym planie zostaną zakończone. Spowoduje to przerwanie wszystkich usług powiązanych z tymi usługami. Jednak nadal trzeba jeszcze trochę posprzątać. Stały dostęp do usług z aplikacji własnych i aplikacji systemowych OEM jest zachowany tak długo, jak długo użytkownik (obecnie w tle) nie zostanie zatrzymany.

Usługi trwałe są bardziej problematyczne, ponieważ są one zawarte w grupie o wysokim priorytecie w systemie zarządzania Androida w przypadku braku pamięci. Nawet jeśli aplikacje na pierwszym planie wymagają więcej pamięci, te trwałe procesy w tle nie są zamykane. W konsekwencji z punktu widzenia użytkownika na pierwszym planie usługi trwałe zajmują pewną ilość pamięci, a ta pamięć jest zwracana tylko wtedy, gdy użytkownik uruchomi ponownie samochód i zatrzyma wszystkich użytkowników w tle.

Stan użytkownika

Użytkownik jest w stanie zatrzymanym (STATE_SHUTDOWN), dopóki nie zostanie uruchomiony. Jeśli ustawisz dane logowania użytkownika (np. kod PIN), użytkownik Androida będzie działać, ale pozostanie zablokowany (STATE_RUNNING_LOCKED), dopóki nie odblokuje ekranu blokady. Gdy użytkownik odblokuje urządzenie, katalog zaszyfrowanych danych logowania zostanie odszyfrowany, a katalogi danych tego użytkownika staną się dostępne. W przypadku zwykłego przełączania użytkowników użytkownik w tle nie jest zatrzymywany i po odblokowaniu pozostaje uruchomiony i odblokowany (STATE_RUNNING_UNLOCKED).

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

Zalecana technika aktualizowania danych w aplikacjach samochodowych polega na używaniu JobScheduler do planowania zadań do wykonania, gdy urządzenie jest w stanie bezczynności, w ramach trybu garażu (np. pobieranie aktualizacji aplikacji z Google Play). Gdy aplikacje zarejestrują zadania za pomocą funkcji JobSchedulerJobSchedulerService, zadania są wykonywane, gdy jest to możliwe.

Usługa CarService wysyła sygnał do JobSchedulerService, aby uruchomić zadania ustawione do wykonania, gdy urządzenie Automotive jest nieaktywne w trybie garażu. Aby JobSchedulerService mogła wykonywać zadania w tle dla użytkownika w tle, użytkownik musi mieć stan STATE_RUNNING_UNLOCKED. Zadania umieszczone w kolejce JobSchedulerService są przechowywane i przetrwają przez cykle zasilania.

JobScheduler nie może wykonywać zadań dla konkretnego użytkownika, jeśli ten użytkownik nie został odblokowany po cyklu zasilania. Gdy jednak użytkownik zostanie odblokowany i pozostanie w grupie STATE_RUNNING_UNLOCKED, zadania dla tego użytkownika mogą być wykonywane.