차고 모드

차량에 유휴 시간을 제공하기 위해 Garage Mode는 유휴 상태 로 제한된 JobScheduler 의 작업을 실행할 수 있도록 시스템을 활성 상태로 유지합니다.

차고 모드란 무엇입니까?

휴대폰과 같은 연결된 장치에서 사용자는 시스템을 통해 장치가 안정적이고 최신 상태이며 최적화되었는지 확인합니다. 해당 상태를 달성하기 위해 Android 플랫폼은 사용자가 기기와 상호작용하지 않을 때 앱이 작업을 수행할 수 있는 유휴 시간 창을 제공합니다. 사용자가 장시간(60분 이상) 휴대폰을 터치하지 않고 화면이 꺼지면 휴대폰은 유휴 상태로 간주됩니다. 휴대폰과 달리 자동차를 사용하지 않을 때는 전원이 꺼지는데, 이는 자동차가 유휴 시간을 갖지 않는다는 것을 의미합니다. 차고 모드는 차량 내 유휴 시간을 보장합니다.

사용자가 자동차의 시동을 끄면 시스템은 차고 모드로 들어갑니다. 자동차가 차고 모드에 있는 동안 시스템 전원은 켜지고 디스플레이는 꺼지며 JobScheduler 대기열의 유휴 작업이 실행됩니다. 차고 모드를 구현하려면 장치 구현 지침을 참조하세요.

장치 구현 지침

차고 모드를 활성화하려면 차량을 끌 때 차량 HAL(VHAL)이 SHUTDOWN_ONLY 또는 CAN_SLEEP 으로 설정된 매개변수를 사용하여 SHUTDOWN_PREPARE 상태와 함께 AP_POWER_STATE_REQ 전송해야 합니다.

SHUTDOWN_PREPARE 상태가 유효하려면 VHAL이 AP_POWER_STATE_REQ 명령에 대해 두 매개변수(상태 및 추가 매개변수)를 지정해야 합니다. 이를 통해 장치는 JobScheduler 에서 예약된 작업을 감지하고 작업이 완료될 때까지 시스템이 일시 중지되거나 종료되는 것을 방지하는 차고 모드로 들어갈 수 있습니다.

기기 구현은 Android 프레임워크에 어떻게 연결되나요?

차고 모드의 경우 프레임워크는 필요한 기간이 초과되거나 모든 작업이 실행되어 시스템이 종료될 때까지 종료 시간을 연장하도록 VHAL에 요청합니다. CDD에 정의된 특정 상황에서 기기 구현은 시스템을 더 빨리 종료할 수 있습니다. Android 호환성 요구사항에 대한 자세한 내용은 Android 호환성 정의 문서(CDD)를 참조하세요.

차고 모드가 완료되기 전에 VHAL이 시스템을 종료해야 하는 경우 VHAL은 매개변수가 SHUTDOWN_IMMEDIATELY 또는 SLEEP_IMMEDIATELY 로 설정된 SHUTDOWN_PREPARE 실행할 수 있습니다. 기기 구현은 특정 상황, 즉 일반적으로 시스템 실행을 유지하는 데 필요한 리소스를 사용할 수 없는 경우 에만 이를 사용할 수 있습니다. 예를 들어, 배터리 용량이 부족한 경우.

차고 모드

그림 1. 차고 모드 흐름

앱 개발자는 차고 모드를 어떻게 사용하나요?

앱과 서비스는 차고 모드와 직접 상호 작용하지 않습니다. 대신 앱은 JobScheduler 에서 작업을 예약합니다. 유휴 상태 로 인해 제한된 작업은 차고 모드 중에 실행됩니다.

다음 코드는 차고 모드 중에 실행되도록 작업을 예약하는 방법을 보여줍니다.

public class MyGarageModeJob extends JobService { ... }

Context context = ...;
int jobId = ...;

ComponentName myGarageModeJobName = new componentName(context,
                                                      MyGarageModeJob.class);

JobInfo.Builder infoBuilder = new JobInfo.Builder(jobId, myGarageModeJobName)
                    .setRequiresDeviceIdle(true);

// Example of an optional constraint:
infoBuilder.setRequiredNetworkType(NetworkType.NETWORK_TYPE_UNMETERED);

JobScheduler jobScheduler = (JobScheduler) context
                    .getSystemService(Context.JOB_SCHEDULER_SERVICE);

jobScheduler.schedule(infoBuilder.build());

디버그 차고 모드

차고 모드를 디버깅하려면:
  1. 차고 모드와 관련된 로깅 범주를 활성화하려면:
    adb shell stop
    adb shell setprop log.tag.GarageMode VERBOSE
    adb shell setprop log.tag.Finsky VERBOSE
    adb shell setprop log.tag.CAR.POWER VERBOSE
    adb shell setprop log.tag.JobScheduler.Connectivity VERBOSE
    adb shell start
    
  2. 차고 모드가 시작되고 있음을 나타내기 위해 logcat 출력을 검토하려면:
    GarageMode: [Controller]: CPM state changed to SHUTDOWN_PREPARE
    GarageMode: [GarageMode]: Entering GarageMode
    GarageMode: [Controller]: Sending broadcast with action: com.android.server.jobscheduler.GARAGE_MODE_ON
    
  3. 차고 모드가 완료되었음을 나타내는 logcat 출력을 확인하려면(취소 또는 완료):
    [GarageMode]: GarageMode was canceled
    
    또는
    [GarageMode]: GarageMode completed normally
    

    차고 모드는 위에서 설명한 대로 차량의 전원 상태에 따라 달라집니다.

  4. Logcat 출력을 검토하여 올바른 전원 상태가 입력되었음을 나타냅니다.
    CAR.POWER: starting shutdown prepare without Garage Mode
    GarageMode: [Controller]: CPM state changed to SHUTDOWN_PREPARE
    GarageMode: [GarageMode]: Entering GarageMode
    CAR.POWER: send shutdown prepare
    CAR.POWER: setPowerState=SHUTDOWN_PREPARE(7) param=0