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 JobScheduler
i JobSchedulerService
, 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.