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

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

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

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

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

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

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

사용자가 포그라운드에서 백그라운드로(또는 그 반대로) 전환하면 이 사용자의 모든 활동 및 포그라운드 서비스가 종료됩니다. 이로 인해 관련 서비스에 바인딩된 모든 서비스가 중지됩니다. 하지만 일부 정리는 유지됩니다. 자사 및 OEM 시스템 애플리케이션의 영구 서비스는 (현재 백그라운드) 사용자가 중지되지 않는 한 계속 실행됩니다.

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

사용자 상태

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

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

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

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

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