Pour fournir des périodes d'inactivité dans les véhicules, le mode Garage maintient le système actif afin que les tâches dans JobScheduler
limitées par l'inactivité puissent être exécutées.
Qu'est-ce que le mode Garage ?
Sur les appareils connectés tels que les téléphones, les utilisateurs s'appuient sur le système pour s'assurer que leurs appareils sont stables, à jour et optimisés. Pour atteindre cet état, la plate-forme Android fournit une fenêtre de temps d'inactivité pendant laquelle les applications peuvent effectuer des tâches lorsque l'utilisateur n'interagit pas avec l'appareil. Un téléphone est considéré comme inactif lorsque l'utilisateur ne l'utilise pas pendant une longue période (60 minutes ou plus) et que l'écran est éteint. Contrairement à un téléphone, lorsqu'une voiture n'est pas utilisée, elle est éteinte, ce qui signifie qu'elle n'a pas de temps d'inactivité. Le mode Garage permet de garantir le temps d'inactivité dans une voiture.
Lorsque l'utilisateur éteint une voiture, le système passe en mode Garage. Lorsqu'une voiture est en mode Garage, le système est allumé, l'écran est éteint et les tâches inactives de la file d'attente JobScheduler
sont exécutées. Pour implémenter le mode Garage, consultez les Consignes d'implémentation des appareils.
Consignes d'implémentation des appareils
Pour activer le mode Garage, lorsque vous éteignez le véhicule, le HAL du véhicule (VHAL) doit envoyer AP_POWER_STATE_REQ
avec l'état SHUTDOWN_PREPARE
et le paramètre défini sur SHUTDOWN_ONLY
ou CAN_SLEEP
.
Pour que l'état SHUTDOWN_PREPARE
soit efficace, le VHAL doit spécifier les deux paramètres (état et paramètre supplémentaire) pour la commande AP_POWER_STATE_REQ
. Cela permet à l'appareil de passer en mode Garage, qui détecte les tâches planifiées dans JobScheduler
et empêche le système de suspendre ou d'arrêter son fonctionnement tant que les tâches ne sont pas terminées.
Comment les implémentations d'appareils se connectent-elles au framework Android ?
Pour le mode Garage, le framework demande au VHAL de prolonger le délai d'arrêt jusqu'à ce que la durée requise soit dépassée ou que toutes les tâches aient été exécutées, auquel cas le système s'arrête. Dans des circonstances spécifiques définies dans le CDD, les implémentations d'appareils peuvent arrêter le système plus tôt. Pour en savoir plus sur les exigences de compatibilité Android, consultez le document de définition de la compatibilité (CDD) Android.
Si le VHAL doit arrêter le système avant la fin du mode Garage, il peut émettre SHUTDOWN_PREPARE
avec le paramètre défini sur SHUTDOWN_IMMEDIATELY
ou SLEEP_IMMEDIATELY
. Les implémentations d'appareils ne peuvent l'utiliser que dans des circonstances spécifiques, généralement lorsque les ressources nécessaires au fonctionnement du système ne sont pas disponibles. Par exemple, lorsque la capacité de la batterie est insuffisante.
Figure 1 : Flux du mode Garage
Comment les développeurs d'applications utilisent-ils le mode Garage ?
Les applications et les services n'interagissent pas directement avec le mode Garage. À la place, les applications planifient des tâches dans JobScheduler
.
Les tâches limitées par l'inactivité sont exécutées en mode Garage.
Le code suivant montre comment planifier l'exécution d'une tâche pendant le mode 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());
Mode Débogage du garage
Pour déboguer le mode Garage :- Pour activer les catégories de journalisation pertinentes pour le mode 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
- Pour examiner la sortie Logcat afin de vérifier que le mode Garage est en cours de démarrage:
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
- Pour déterminer que la sortie Logcat indique que le mode Garage est terminé (annulé ou terminé):
ou[GarageMode]: GarageMode was canceled
[GarageMode]: GarageMode completed normally
Le mode Garage dépend de l'état de la batterie du véhicule, comme décrit ci-dessus.
- Examinez la sortie logcat pour vérifier que les états d'alimentation corrects sont saisis:
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