Para proporcionar períodos de tiempo de inactividad en los vehículos, el Modo Garaje mantiene el sistema activo para que se puedan ejecutar los trabajos en JobScheduler
restringidos por inactividad .
¿Qué es el modo garaje?
En dispositivos conectados, como teléfonos, los usuarios confían en el sistema para garantizar que los dispositivos estén estables, actualizados y optimizados. Para lograr ese estado, la plataforma Android proporciona una ventana de tiempo de inactividad durante la cual las aplicaciones pueden realizar tareas cuando el usuario no interactúa con el dispositivo. Se considera que un teléfono está inactivo cuando el usuario no lo toca durante un período prolongado (60 minutos o más) y la pantalla está apagada. A diferencia de un teléfono, cuando un automóvil no está en uso, está apagado, lo que significa que el automóvil no tiene una ventana de tiempo de inactividad . El modo Garaje garantiza el tiempo de inactividad en el coche.
Cuando el usuario apaga un automóvil, el sistema ingresa al modo garaje. Mientras un automóvil está en modo garaje, el sistema se enciende, la pantalla se apaga y se ejecutan los trabajos inactivos en la cola JobScheduler
. Para implementar el Modo Garaje, consulte Pautas de implementación del dispositivo .
Pautas de implementación del dispositivo
Para activar el Modo Garaje, al apagar el vehículo, el Vehículo HAL (VHAL) debe enviar AP_POWER_STATE_REQ
con el estado SHUTDOWN_PREPARE
con el parámetro establecido en SHUTDOWN_ONLY
o CAN_SLEEP
.
Para que el estado SHUTDOWN_PREPARE
sea efectivo, el VHAL debe especificar los dos parámetros (estado y el parámetro adicional) para el comando AP_POWER_STATE_REQ
. Esto permite que el dispositivo ingrese al Modo Garaje, que detecta trabajos programados en JobScheduler
y evita que el sistema suspenda o apague hasta que se completen los trabajos.
¿Cómo se conectan las implementaciones de dispositivos al marco de Android?
Para el modo Garaje, el marco solicita a VHAL que extienda el tiempo de apagado hasta que se exceda la duración requerida o se hayan ejecutado todos los trabajos, momento en el cual el sistema se apaga. En circunstancias específicas definidas en el CDD, las implementaciones de dispositivos pueden apagar el sistema antes. Para obtener detalles sobre los requisitos de compatibilidad de Android, consulte el Documento de definición de compatibilidad de Android (CDD) .
Si el VHAL debe apagar el sistema antes de que se complete el Modo Garaje, el VHAL puede emitir SHUTDOWN_PREPARE
con el parámetro establecido en SHUTDOWN_IMMEDIATELY
o SLEEP_IMMEDIATELY
. Las implementaciones de dispositivos pueden usar esto solo en circunstancias específicas, normalmente cuando los recursos necesarios para mantener el sistema en funcionamiento no están disponibles. Por ejemplo, cuando la capacidad de la batería es insuficiente.
Figura 1. Flujo del modo garaje
¿Cómo trabajan los desarrolladores de aplicaciones con el modo Garaje?
Las aplicaciones y los servicios no interactúan directamente con el Modo Garaje. En cambio, las aplicaciones programan trabajos en JobScheduler
. Los trabajos restringidos por la inactividad se ejecutan durante el modo Garaje.
El siguiente código 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());
Modo de depuración de garaje
Para depurar el modo Garaje:- Para habilitar categorías de registro relevantes para el modo Garaje:
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
- Para revisar la salida de logcat para indicar que se está iniciando el modo Garaje:
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
- Para determinar qué salida de logcat indica que el Modo Garaje ha finalizado (cancelado 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 anteriormente.
- Revise la salida 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