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

모바일 Android에서는 여러 사용자에 대한 지원을 통해 사용자가 백그라운드(다른 사용자가 활성화된 경우) 및 포그라운드(현재 사용자라고도 함)에서 실행할 수 있습니다. 적절한 경우 리소스를 절약하기 위해 시스템은 사용자 종료를 관리합니다. 항상 한 명의 전경 사용자가 필요합니다 .

Android 10부터 Android Automotive에는 한 번에 최대 3명의 사용자 실행할 수 있도록 허용하는 기본 구성이 있습니다( config_multiuserMaxRunningUsers ). 따라서 헤드리스 시스템 사용자(User 0) 외에 전경 사용자 1명과 배경 사용자 1명만 구성할 수 있습니다.

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

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

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

사용자가 포그라운드에서 백그라운드로(또는 그 반대로) 전환하는 경우 해당 사용자의 모든 활동과 포그라운드 서비스가 종료됩니다. 이로 인해 해당 서비스에서 바인딩된 모든 서비스가 중단됩니다. 그러나 일부 정리가 남아 있습니다. 자사 및 OEM 시스템 앱의 영구 서비스는 (현재 백그라운드) 사용자가 중지되지 않는 한 계속 실행됩니다.

영구 서비스는 Android의 OOM(메모리 부족) 관리 시스템에서 우선 순위가 높은 버킷에 포함되어 있으므로 더 문제가 됩니다. 포그라운드 사용자용 앱에 더 많은 메모리가 필요한 경우에도 해당 영구 백그라운드 프로세스는 종료되지 않습니다. 결과적으로 포그라운드 사용자의 관점에서 볼 때 영구 서비스는 일정량의 메모리를 영구적으로 분할하며 해당 메모리는 사람이 자동차를 재부팅하고 백그라운드 사용자가 중지된 경우에만 반환됩니다.

사용자 상태

사용자는 시작될 때까지 중지된 상태( STATE_SHUTDOWN )입니다. 사용자 자격 증명(예: PIN)이 설정된 경우 Android 사용자는 실행되지만 사용자가 해당 사용자의 잠금 화면을 잠금 해제할 때까지 잠긴 상태( STATE_RUNNING_LOCKED )를 유지합니다. 사용자의 잠금이 해제되면 자격 증명 암호화 저장소의 암호가 해독되고 해당 사용자의 데이터 디렉터리를 사용할 수 있게 됩니다. 일반적인 사용자 전환의 경우 백그라운드 사용자는 일단 잠금 해제되면 중지되지 않고 실행 및 잠금 해제( STATE_RUNNING_UNLOCKED ) 상태를 유지합니다.

사용자를 위한 Garage Mode, JobScheduler 및 앱 업데이트

자동차 앱에서 데이터를 업데이트하는 데 권장되는 기술은 JobScheduler를 사용하여 Garage Mode (예: Google Play 스토어에서 앱 업데이트 다운로드)를 통해 기기가 유휴 상태일 때 실행할 작업을 예약하는 것입니다. 앱이 JobScheduler 및 JobSchedulerService에 작업을 등록한 후 가능한 경우 작업이 실행됩니다.

CarService는 Garage Mode를 통해 자동차 장치가 유휴 상태 일 때 실행되도록 설정된 작업을 트리거하기 위해 JobSchedulerService에 신호를 보냅니다. JobSchedulerService가 백그라운드 사용자에 대해 작업을 실행하려면 해당 사용자가 STATE_RUNNING_UNLOCKED 상태에 있어야 합니다. JobSchedulerService의 대기열에 있는 작업은 전원을 껐다가 켜도 지속되고 유지됩니다.

JobScheduler는 전원을 껐다 켠 후 사용자가 잠금 해제되지 않은 경우 특정 사용자에 대해 작업을 실행할 수 없습니다. 그러나 일단 잠금이 해제되고 사용자가 STATE_RUNNING_UNLOCKED 상태로 유지되면 해당 사용자에 대한 작업을 실행할 수 있습니다.