Para proporcionar períodos de inactividad en los vehículos, el modo de garaje mantiene el sistema despierto para que se puedan ejecutar las tareas en JobScheduler
restringidas con inactividad.
¿Qué es el modo de cochera?
En los dispositivos conectados, como los teléfonos, los usuarios dependen del sistema para garantizar que los dispositivos sean estables, estén actualizados y optimizados. Para lograr ese estado, la plataforma de Android proporciona una ventana de tiempo inactivo durante la cual las apps pueden realizar tareas cuando el usuario no interactúa con el dispositivo. Un teléfono se considera 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 se usa, está apagado, lo que significa que no tiene un período de inactividad. El modo de garaje garantiza el tiempo de inactividad en un automóvil.
Cuando el usuario apaga un automóvil, el sistema entra en modo de garaje. Mientras un auto está en modo de cochera, el sistema está encendido, la pantalla está apagada y se ejecutan las tareas inactivas en la cola de JobScheduler
. Para implementar el modo de garaje, consulta los Lineamientos de implementación de dispositivos.
Lineamientos para la implementación de dispositivos
Para activar el modo de garaje, cuando se apaga el vehículo, el sistema HAL del vehículo (VHAL) debe enviar AP_POWER_STATE_REQ
con el estado SHUTDOWN_PREPARE
con el parámetro configurado en SHUTDOWN_ONLY
o CAN_SLEEP
.
Para que el estado SHUTDOWN_PREPARE
sea eficaz, el VHAL debe especificar los dos parámetros (el estado y el parámetro adicional) para el comando AP_POWER_STATE_REQ
. Esto permite que el dispositivo entre en el modo Garage, que detecta trabajos programados en JobScheduler
y evita que el sistema suspenda o apague el dispositivo hasta que se completen los trabajos.
¿Cómo se conectan las implementaciones de dispositivos al framework de Android?
En el modo Garage, el framework solicita al VHAL que extienda el tiempo de apagado hasta que se supere la duración requerida o se ejecuten todas las tareas, momento en el que se apaga el sistema. 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, consulta el Documento de definición de compatibilidad (CDD) de Android.
Si el VHAL debe apagar el sistema antes de que se complete el modo de garaje, puede emitir SHUTDOWN_PREPARE
con el parámetro configurado en SHUTDOWN_IMMEDIATELY
o SLEEP_IMMEDIATELY
. Las implementaciones de dispositivos pueden usar esto solo en circunstancias específicas, por lo general, 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 de cochera
¿Cómo trabajan los desarrolladores de apps con el modo Garage?
Las apps y los servicios no interactúan directamente con el modo de garaje. En su lugar, las apps programan tareas en JobScheduler
.
Los trabajos limitados por la inactividad se ejecutan durante el modo Garage.
En el siguiente código, se muestra cómo programar una tarea para que se ejecute durante el modo de 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 del garaje
Para depurar el modo garaje, haz lo siguiente:- Para habilitar las categorías de registro relevantes para el modo Garage, 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 que indica que se está iniciando el modo de 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 que la salida de logcat indique que el modo de la cochera finalizó (se canceló o completó), haz lo siguiente:
o[GarageMode]: GarageMode was canceled
[GarageMode]: GarageMode completed normally
El modo de garaje depende del estado de carga del vehículo, como se describió anteriormente.
- 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