Modalità Garage

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Per fornire periodi di inattività nei veicoli, la modalità Garage mantiene il sistema attivo in modo che i lavori in JobScheduler vincolati dall'inattività possano essere eseguiti.

Cos'è la modalità Garage?

Sui dispositivi connessi come i telefoni, gli utenti fanno affidamento sul sistema per garantire che i dispositivi siano stabili, aggiornati e ottimizzati. Per raggiungere tale stato, la piattaforma Android fornisce una finestra di tempo di inattività durante la quale le applicazioni possono eseguire attività quando l'utente non interagisce con il dispositivo. Un telefono è considerato inattivo quando l'utente non lo tocca per un periodo prolungato (60 minuti o più) e lo schermo è spento. A differenza di un telefono, quando l'auto non viene utilizzata, è spenta, il che significa che l'auto non ha una finestra di tempo di inattività . La modalità Garage assicura il tempo di inattività in auto.

Quando un'auto viene spenta dall'utente, il sistema entra in modalità Garage. Mentre un'auto è in modalità Garage, il sistema è acceso, il display è spento e vengono eseguiti i lavori inattivi nella coda JobScheduler. Per implementare la modalità Garage, consulta le linee guida per l'implementazione del dispositivo di seguito.

Linee guida per l'implementazione del dispositivo

Per attivare la Modalità Garage, allo spegnimento del veicolo, il Veicolo HAL (VHAL) deve inviare AP_POWER_STATE_REQ con lo stato SHUTDOWN_PREPARE con il parametro impostato su SHUTDOWN_ONLY o CAN_SLEEP .

Affinché lo stato SHUTDOWN_PREPARE sia effettivo, il VHAL deve specificare i due parametri (stato e parametro aggiuntivo) per il comando AP_POWER_STATE_REQ . Ciò consente al dispositivo di entrare in modalità Garage, che rileva i lavori programmati in JobScheduler e impedisce al sistema di procedere alla sospensione o allo spegnimento fino al completamento dei lavori.

In che modo le implementazioni dei dispositivi si collegano al framework Android?

Per la modalità Garage, il framework richiede al VHAL di estendere il tempo di spegnimento fino al superamento della durata richiesta o all'esecuzione di tutti i lavori, momento in cui il sistema verrà spento. In circostanze specifiche definite nel CDD, le implementazioni del dispositivo possono arrestare il sistema prima. (Per i dettagli sui requisiti di compatibilità Android, vedere il Documento di definizione della compatibilità Android (CDD) .) Se il VHAL deve spegnere il sistema prima del completamento della modalità Garage, il VHAL può emettere SHUTDOWN_PREPARE con il parametro impostato su SHUTDOWN_IMMEDIATELY o SLEEP_IMMEDIATELY . Le implementazioni del dispositivo possono utilizzarlo solo in circostanze specifiche, in genere quando le risorse necessarie per mantenere in esecuzione il sistema non sono disponibili. Ad esempio, quando la capacità della batteria è insufficiente.

Modalità garage

Come funzionano gli sviluppatori di applicazioni con la modalità Garage?

Applicazioni e servizi non interagiscono direttamente con Garage Mode. Al contrario, le app pianificano i lavori in JobScheduler . I lavori vincolati dall'inattività vengono eseguiti durante la modalità Garage.

Il codice seguente mostra come pianificare l'esecuzione di un processo durante la modalità Garage:

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());

Debug della modalità Garage

Per eseguire il debug della modalità Garage:
  1. Per abilitare le categorie di registrazione relative alla modalità Garage:
    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. Per rivedere l'output logcat per indicare che la modalità Garage sta iniziando:
    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. Per determinare l'output logcat per indicare che la modalità Garage è terminata (annullata o completata):
    [GarageMode]: GarageMode was canceled
    
    o
    [GarageMode]: GarageMode completed normally
    

    La modalità Garage dipende dallo stato di alimentazione del veicolo come descritto sopra.

  4. Esaminare l'output logcat per indicare che sono stati immessi gli stati di alimentazione corretti:
    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