Обработка пользовательской системы на переднем и заднем плане

В мобильном Android поддержка нескольких пользователей позволяет пользователям работать в фоновом режиме (когда активен другой пользователь) и на переднем плане (также известном как текущий пользователь). Чтобы сэкономить ресурсы, когда это необходимо, система управляет отключением пользователей. Всегда требуется один пользователь на переднем плане .

Начиная с Android 10, Android Automotive имеет конфигурацию по умолчанию, позволяющую одновременно запускать максимум трем пользователям ( config_multiuserMaxRunningUsers ). Таким образом, в дополнение к Пользователю автономной системы (Пользователь 0) можно настроить только одного Пользователя на переднем плане и одного Пользователя на заднем плане.

  • В типичных обстоятельствах текущий пользователь работает на переднем плане, а пользователь автономной системы (Пользователь 0) — в фоновом режиме. Как только пользователь перемещается в фоновый режим, он останавливается, но не блокируется. При достижении максимального количества пользователей последний использовавшийся фоновый пользователь останавливается и блокируется ( config_multiuserDelayUserDataLocking ).
  • Остановлен и разблокирован фоновый режим. Пользователи перезапускаются в режиме гаража .

Гостевые пользователи являются эфемерными и могут работать только на переднем плане. Когда человек выходит из гостевого режима, гостевой пользователь останавливается и не может работать в фоновом режиме.

Фоновые пользовательские процессы

Когда происходит переключение Пользователя с переднего плана на фоновый (и наоборот), все действия и службы приоритетного режима для этого Пользователя прекращаются. Это приводит к остановке всех служб, связанных с этими службами. Тем не менее, некоторая очистка остается. Постоянные службы собственных и OEM-системных приложений продолжают работать до тех пор, пока (теперь фоновый) пользователь не остановлен.

Постоянные службы являются более проблематичными, поскольку эти службы содержатся в сегменте с высоким приоритетом в системе управления нехваткой памяти (OOM) Android. Даже если приложениям для пользователя на переднем плане требуется больше памяти, эти постоянные фоновые процессы не завершаются. В результате, с точки зрения пользователя на переднем плане, постоянные службы постоянно выделяют некоторый объем памяти, и эта память возвращается только тогда, когда человек перезагружает автомобиль и все фоновые пользователи останавливаются.

Состояние пользователя

Пользователь находится в остановленном состоянии ( STATE_SHUTDOWN ) до тех пор, пока он не будет запущен. Если установлены учетные данные пользователя (например, PIN-код), пользователь Android запускается, но остается заблокированным ( STATE_RUNNING_LOCKED ), пока человек не разблокирует экран блокировки для этого пользователя. Когда Пользователя разблокируют, его зашифрованное хранилище учетных данных расшифровывается и каталоги данных этого Пользователя становятся доступными. При типичном переключении пользователей фоновый пользователь не останавливается и продолжает работать и разблокирован ( STATE_RUNNING_UNLOCKED ) после разблокировки.

Режим гаража, JobScheduler и обновления приложений для пользователей

Рекомендуемый метод обновления данных автомобильных приложений — использовать JobScheduler для планирования запуска заданий, когда устройство находится в состоянии ожидания, через режим гаража (например, загрузка обновлений приложения из магазина Google Play). После того как приложения регистрируют задания с помощью JobScheduler и JobSchedulerService, задания выполняются, когда это возможно.

CarService отправляет сигнал JobSchedulerService для запуска заданий, которые будут запускаться, когда автомобильное устройство находится в режиме ожидания в режиме гаража. Чтобы JobSchedulerService мог запускать задания для фоновых пользователей, этот пользователь должен находиться в состоянии STATE_RUNNING_UNLOCKED . Задания, поставленные в очередь в JobSchedulerService, сохраняются и сохраняются в течение циклов включения и выключения.

JobScheduler не может запускать задания для конкретного пользователя, если пользователь ни разу не был разблокирован после выключения и включения питания. Однако после разблокировки и если Пользователь остается в состоянии STATE_RUNNING_UNLOCKED , задания для Пользователя могут быть запущены.