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.
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:- 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
- 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
- Para determinar el resultado de logcat a fin de indicar que el modo garaje finalizó (se canceló o
completado):
o[GarageMode]: GarageMode was canceled
[GarageMode]: GarageMode completed normally
El modo garaje depende del estado de energía del vehículo, como se describe más arriba.
- 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