Modo garaje

Para proporcionar los períodos de inactividad en los vehículos, el Modo garaje mantiene el sistema despierto para que los trabajos de JobScheduler restringida con inactividad.

¿Qué es el Modo garaje?

En los dispositivos conectados, como los teléfonos, los usuarios confían en el sistema para garantizar que los dispositivos sean estables, actualizadas y optimizadas. Para lograr ese estado, la plataforma de Android proporciona un inactivo tiempo durante la cual las aplicaciones pueden realizar tareas cuando el usuario no interactuar con el dispositivo. Se considera que un teléfono está inactivo cuando el usuario no toca durante un tiempo prolongado (60 minutos o más) y la pantalla queda apagada. A diferencia de un teléfono, cuando un automóvil no está en uso, está apagado, lo que significa que no tiene tiempo de inactividad en la ventana modal. El modo garaje garantiza el tiempo de inactividad en un automóvil.

Cuando el usuario apaga un vehículo, el sistema entra en el Modo garaje. Mientras que el vehículo esté en modo garaje, el sistema esté encendido, la pantalla esté apagada y se ejecutan los trabajos inactivos en la cola de JobScheduler. Para implementar el Modo garaje, consulta Lineamientos de implementación en dispositivos

Lineamientos de implementación para dispositivos

Para activar el modo garaje, cuando apagas el vehículo, la HAL del vehículo (VHAL) debe enviar AP_POWER_STATE_REQ con el estado SHUTDOWN_PREPARE con el parámetro configurado como SHUTDOWN_ONLY o CAN_SLEEP.

Para que el estado SHUTDOWN_PREPARE sea efectivo, el VHAL debe especificar ambos. parámetros (estado y el parámetro adicional) para el comando AP_POWER_STATE_REQ. Esto permite que el dispositivo entre en modo garaje, que detecta los trabajos programados JobScheduler e impide que el sistema se suspenda o se cierre hasta que de que se completen.

¿Cómo se conectan las implementaciones de dispositivos al framework de Android?

Para el Modo garaje, el framework solicita a la VHAL que extienda el tiempo de apagado. hasta que se supere la duración requerida o se hayan ejecutado todos los trabajos. a la que el sistema se apaga. En circunstancias específicas definidas en el CDD, las implementaciones en dispositivos pueden apagar el sistema más rápido. Más información sobre los requisitos de compatibilidad de Android, consulta el Documento de definición de compatibilidad (CDD).

Si el VHAL debe apagar el sistema antes de que se complete el modo garaje, SHUTDOWN_PREPARE con el parámetro configurado como SHUTDOWN_IMMEDIATELY o SLEEP_IMMEDIATELY. Dispositivo las implementaciones pueden usar esto en circunstancias específicas solo, por lo general, cuando los recursos necesarios para mantener el sistema en funcionamiento no están disponibles. Para por ejemplo, cuando la capacidad de la batería es insuficiente.

Modo garaje

Figura 1: Flujo del Modo garaje

¿Cómo trabajan los desarrolladores de apps con el Modo garaje?

Las apps y los servicios no interactúan directamente con el Modo garaje. En cambio, programan trabajos en JobScheduler Esos trabajos se ven limitados por inactividad se ejecutan durante el modo garaje.

En el siguiente código, se muestra cómo programar un trabajo para que se ejecute durante el Modo garaje:

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

Depurar el modo garaje

Para depurar el Modo garaje, haz lo siguiente:
  1. Para habilitar las categorías de registro relevantes para el Modo garaje, haz lo siguiente:
    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. Para revisar el resultado de logcat a fin de indicar que se está iniciando el Modo garaje, haz lo siguiente:
    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. Para determinar el resultado de logcat a fin de indicar que el modo garaje finalizó (se canceló o completado):
    [GarageMode]: GarageMode was canceled
    
    o
    [GarageMode]: GarageMode completed normally
    

    El modo garaje depende del estado de energía del vehículo, como se describe más arriba.

  4. Revisa el resultado de logcat para indicar que se ingresaron los estados de energía correctos:
    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