Mode garage

Pour fournir des périodes d'inactivité dans les véhicules, le mode garage maintient le système afin que les emplois JobScheduler soumis à des contraintes l'inactivité peut être exécutée.

Qu'est-ce que le mode Garage ?

Sur les appareils connectés tels que les téléphones, les utilisateurs comptent sur le système pour s'assurer sont stables, à jour et optimisées. Pour atteindre cet état, la plate-forme Android fournit une inactif durée fenêtre durant laquelle les applications peuvent effectuer des tâches lorsque l'utilisateur interagissent avec l'appareil. Un téléphone est considéré comme inactif lorsque l'utilisateur ne le touche pas. sur une longue durée (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 que la voiture ne contient pas durée d'inactivité fenêtre. Le mode garage garantit le temps d'inactivité au sein d'une voiture.

Lorsqu'une voiture est éteinte par l'utilisateur, le système passe en mode garage. Alors qu'un la voiture est en mode garage, le système est allumé, l'écran est éteint les tâches inactives de la file d'attente JobScheduler sont exécutées. Pour implémenter le mode Garage, consultez Consignes d'implémentation des appareils

Consignes d'implémentation pour les appareils

Pour activer le mode garage, lorsque vous éteignez le véhicule, le HAL (VHAL) du véhicule doit envoyer AP_POWER_STATE_REQ avec l'état SHUTDOWN_PREPARE avec le paramètre défini sur SHUTDOWN_ONLY ou CAN_SLEEP.

Pour que l'état SHUTDOWN_PREPARE soit effectif, le VHAL doit spécifier les deux (état et paramètre supplémentaire) de la commande AP_POWER_STATE_REQ. L'appareil peut alors passer en mode garage, qui détecte les jobs planifiés JobScheduler et empêche le système de procéder à la suspension ou à l'arrêt jusqu'à ce que les jobs sont 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 tous les jobs aient été exécutés, auquel 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 la configuration Android requise, consultez la documentation Document de définition de compatibilité (CDD).

Si le VHAL doit arrêter le système avant la fin du mode Garage, il peut générer SHUTDOWN_PREPARE avec le paramètre défini sur SHUTDOWN_IMMEDIATELY ou SLEEP_IMMEDIATELY. Appareil les implémentations ne peuvent l'utiliser que dans des circonstances spécifiques, généralement lorsque les ressources nécessaires au fonctionnement du système sont indisponibles. Pour C'est le cas lorsque la capacité de la batterie est insuffisante.

Mode garage

Figure 1 : Fonctionnement 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, apps planifient des offres d'emploi dans JobScheduler Ces emplois sont limités idleness sont exécutés en mode Garage.

Le code suivant montre comment planifier l'exécution d'un job en 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());

Déboguer le mode Garage

Pour déboguer le mode Garage: <ph type="x-smartling-placeholder">
    </ph>
  1. 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
    
  2. Pour examiner la sortie logcat indiquant que le mode Garage démarre:
    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. Pour déterminer la sortie logcat indiquant que le mode Garage est terminé (annulé ou terminé):
    [GarageMode]: GarageMode was canceled
    
    ou
    [GarageMode]: GarageMode completed normally
    

    Le mode Garage dépend de la puissance du véhicule, comme décrit dans la description ci-dessus.

  4. Examinez la sortie logcat pour indiquer 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