포그라운드 및 백그라운드 사용자 시스템 처리

모바일 Android에서 여러 사용자를 지원하면 사용자가 백그라운드 (다른 사용자가 활성 상태일 때) 및 포그라운드에 있는 (다른 사용자가 활성 상태일 때) 현재 사용자). 해당하는 경우 리소스를 절약하기 위해 시스템에서 사용자 종료를 관리합니다. 포그라운드 사용자 1명이 항상 필요합니다.

Android 10부터 Android Automotive에는 기본값이 있습니다. 한 번에 최대 3명의 사용자가 실행할 수 있도록 하는 구성 (config_multiuserMaxRunningUsers) 따라서 헤드리스 시스템 사용자 (사용자 0) - 포그라운드 사용자 한 명과 백그라운드 사용자 한 명만 구성할 수 있습니다.

  • 일반적인 상황에서는 현재 사용자가 포그라운드에서 실행되고 헤드리스 시스템 사용자(사용자 0)가 백그라운드에서 실행됩니다. 사용자가 백그라운드로 이동하면 사용자가 중지되지만 잠기지 않습니다. 최대 사용자 수가 충족되면 가장 오래전에 사용한 백그라운드 사용자가 중지되고 잠김 (config_multiuserDelayUserDataLocking)
  • 중지 및 잠금 해제된 백그라운드 사용자는 차고 모드 중에 다시 시작됩니다.

게스트 사용자는 일시적이며 포그라운드에서만 실행할 수 있습니다. 사용자가 게스트에서 전환하면 게스트 사용자가 중지되며 백그라운드에서 실행할 수 없습니다.

백그라운드 사용자 프로세스

사용자가 포그라운드에서 백그라운드로 (또는 그 반대로 전환되면) 모든 활동은 해당 사용자의 포그라운드 서비스 및 포그라운드 서비스가 종료됩니다. 이로 인해 관련 서비스에 바인딩된 모든 서비스가 중지됩니다. 하지만 일부 정리는 유지됩니다. 지속적 서비스가 실행되는 동안 퍼스트 파티 및 OEM 시스템 앱이 (현재 백그라운드) 사용자가 중지되지 않습니다.

영구 서비스는 서비스가 Android의 OOM (메모리 부족)에서 우선순위가 높은 버킷에 포함되어 있음 관리 시스템입니다. 포그라운드 사용자의 앱에 더 많은 메모리가 필요하더라도 백그라운드 프로세스가 종료되지 않습니다 결과적으로 포그라운드 사용자의 영구 서비스가 일정량의 메모리를 영구적으로 소모하고 이 메모리는 누군가 자동차를 재부팅하고 백그라운드를 떠올릴 때만 사용자가 중지됩니다.

사용자 상태

사용자는 정지 상태 (STATE_SHUTDOWN)로 시작됩니다 사용자 인증 정보(예: PIN)를 설정하면 Android 사용자가 실행되지만, 사용자가 잠금 화면을 잠금 해제할 때까지 잠긴 상태로 유지됩니다(STATE_RUNNING_LOCKED). 사용자가 잠금 해제되면 사용자 인증 정보 암호화 스토리지가 복호화됩니다. 해당 사용자의 데이터 디렉터리를 사용할 수 있게 됩니다. 일반적인 사용자 전환에서는 백그라운드 사용자가 중지되지 않고 잠금 해제된 후 실행되고 잠금 해제 상태로 유지됩니다(STATE_RUNNING_UNLOCKED).

사용자를 위한 차고 모드, JobScheduler, 앱 업데이트

Automotive 앱이 데이터를 업데이트하는 데 권장되는 기술은 JobScheduler를 사용하여 기기가 차고 모드를 통해 유휴 상태에 있을 때 작업을 실행하도록 예약하는 것입니다(예: Google Play에서 앱 업데이트 다운로드). 앱이 JobSchedulerJobSchedulerService에 작업을 등록하면 가능한 경우 작업이 실행됩니다.

CarService는 JobSchedulerService에 신호를 전송하여 실행하도록 설정된 작업을 트리거합니다. Automotive 기기가 유휴 상태일 때 차고 모드를 통해 실행할 수 있습니다 JobSchedulerService가 백그라운드 사용자의 작업을 실행하려면 이 사용자가 STATE_RUNNING_UNLOCKED 상태여야 합니다. JobSchedulerService에 대기 중인 작업은 지속되며 전원을 껐다 켜도 효력을 유지합니다.

JobScheduler는 사용자가 전원을 껐다 켠 후 잠금 해제되지 않은 경우 특정 사용자의 작업을 실행할 수 없습니다. 하지만 사용자가 잠금 해제되고 사용자가 STATE_RUNNING_UNLOCKED에 남아 있으면 사용자의 작업을 실행할 수 있습니다.