Modalità garage

Per fornire periodi di inattività nei veicoli, la modalità garage mantiene il sistema in modo che i job JobScheduler limitato con l'inattività può essere eseguito.

Cos'è la modalità Garage?

Sui dispositivi connessi come i telefoni, gli utenti si affidano al sistema per garantire che i dispositivi sono stabili, aggiornati e ottimizzati. Per ottenere questo stato, la piattaforma Android fornisce un inattivo volta finestra in cui le app possono eseguire attività quando l'utente non interagire con il dispositivo. Un telefono è considerato inattivo quando l'utente non tocca lo smartphone per un lungo periodo (60 minuti o più) e lo schermo è spento. A differenza di un telefono, quando l'auto non è in uso viene spenta, il che significa che l'auto non ha tempo di inattività finestra. La modalità Garage garantisce il tempo di inattività in auto.

Quando un'auto viene spenta dall'utente, il sistema entra in modalità Garage. Mentre è in modalità garage, l'impianto è acceso, il display è spento e i job inattivi nella coda JobScheduler vengono eseguiti. Per implementare la modalità Garage, consulta Linee guida per l'implementazione dei dispositivi.

Linee guida per l'implementazione dei dispositivi

Per attivare la modalità garage, quando spegni il veicolo, viene usato l'HAL per veicoli 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 venga applicato, il VHAL deve specificare i due (stato e parametro aggiuntivo) per il comando AP_POWER_STATE_REQ. In questo modo il dispositivo può attivare la modalità Garage, che rileva i job pianificati JobScheduler e impedisce al sistema di procedere con la sospensione o l'arresto finché i job sono completate.

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

In modalità Garage, il framework richiede a VHAL di estendere il tempo di arresto fino al superamento della durata richiesta o all'esecuzione di tutti i job a quel punto il sistema si arresta. In circostanze specifiche definite nel CDD, le implementazioni dei dispositivi possono arrestare il sistema prima. Per maggiori dettagli sui requisiti di compatibilità di Android, consulta le Compatibility Definition Document (CDD).

Se il VHAL deve arrestare il sistema prima del completamento della modalità Garage, il VHAL può emettere SHUTDOWN_PREPARE con il parametro impostato su SHUTDOWN_IMMEDIATELY o SLEEP_IMMEDIATELY. Dispositivo implementazioni possono utilizzare questa funzionalità solo in circostanze specifiche, in genere se le risorse necessarie per mantenere il sistema in esecuzione non sono disponibili. Per ad esempio quando la capacità della batteria non è sufficiente.

Modalità garage

Figura 1. Flusso modalità Garage

Come lavorano gli sviluppatori di app con la modalità Garage?

App e servizi non interagiscono direttamente con la modalità Garage. Invece, pianificano job in JobScheduler Questi posti di lavoro sono vincolati inattività vengono eseguite in modalità Garage.

Il seguente codice mostra come pianificare un job da eseguire 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 di Garage Mode:
  1. Per attivare le categorie di logging pertinenti 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 esaminare l'output di logcat per indicare che è in corso l'avvio della modalità Garage:
    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 che l'output del logcat indichi che la modalità Garage è terminata (annullata o completata):
    [GarageMode]: GarageMode was canceled
    
    oppure
    [GarageMode]: GarageMode completed normally
    

    La modalità garage dipende dallo stato di alimentazione del veicolo, come descritto vedi sopra.

  4. Rivedi l'output del logcat per indicare che sono stati inseriti 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