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.
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:- 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
- 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
- Per determinare che l'output del logcat indichi che la modalità Garage è terminata (annullata o
completata):
oppure[GarageMode]: GarageMode was canceled
[GarageMode]: GarageMode completed normally
La modalità garage dipende dallo stato di alimentazione del veicolo, come descritto vedi sopra.
- 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