Para fornecer períodos de tempo ocioso nos veículos, o Modo Garagem mantém o sistema ativo para que os trabalhos no JobScheduler
restritos à ociosidade possam ser executados.
O que é o modo Garagem?
Em dispositivos conectados, como telefones, os usuários confiam no sistema para garantir que os dispositivos estejam estáveis, atualizados e otimizados. Para atingir esse estado, a plataforma Android fornece uma janela de tempo ocioso durante a qual os aplicativos podem realizar tarefas quando o usuário não interage com o dispositivo. Um telefone é considerado inativo quando o usuário não toca nele por um longo período (60 minutos ou mais) e a tela está desligada. Ao contrário de um telefone, quando o carro não está em uso, ele fica desligado, o que significa que o carro não tem período de inatividade . O Modo Garagem garante tempo ocioso no carro.
Quando um carro é desligado pelo usuário, o sistema entra no Modo Garagem. Enquanto um carro está no modo Garagem, o sistema é ligado, o display é desligado e os trabalhos ociosos na fila do JobScheduler
são executados. Para implementar o Modo Garagem, consulte Diretrizes de implementação de dispositivos .
Diretrizes de implementação de dispositivos
Para ativar o Modo Garagem, ao desligar o veículo, o HAL do Veículo (VHAL) deve enviar AP_POWER_STATE_REQ
com o estado SHUTDOWN_PREPARE
com o parâmetro definido como SHUTDOWN_ONLY
ou CAN_SLEEP
.
Para que o estado SHUTDOWN_PREPARE
seja efetivo, o VHAL deve especificar os dois parâmetros (estado e parâmetro adicional) para o comando AP_POWER_STATE_REQ
. Isso permite que o dispositivo entre no Modo Garagem, que detecta trabalhos agendados no JobScheduler
e evita que o sistema suspenda ou desligue até que os trabalhos sejam concluídos.
Como as implementações de dispositivos se conectam à estrutura do Android?
Para o Modo Garagem, a estrutura solicita ao VHAL que estenda o tempo de desligamento até que a duração necessária seja excedida ou todos os trabalhos tenham sido executados, momento em que o sistema é encerrado. Sob circunstâncias específicas definidas no CDD, as implementações de dispositivos podem desligar o sistema mais cedo. Para obter detalhes sobre os requisitos de compatibilidade do Android, consulte o Documento de definição de compatibilidade do Android (CDD) .
Se o VHAL precisar desligar o sistema antes da conclusão do Modo Garagem, o VHAL poderá emitir SHUTDOWN_PREPARE
com o parâmetro definido como SHUTDOWN_IMMEDIATELY
ou SLEEP_IMMEDIATELY
. As implementações de dispositivos podem usar isso apenas em circunstâncias específicas, normalmente quando os recursos necessários para manter o sistema funcionando não estão disponíveis. Por exemplo, quando a capacidade da bateria é insuficiente.
Figura 1. Fluxo do Modo Garagem
Como os desenvolvedores de aplicativos trabalham com o Modo Garagem?
Aplicativos e serviços não interagem diretamente com o Modo Garagem. Em vez disso, os aplicativos agendam trabalhos em JobScheduler
. Os trabalhos limitados pela ociosidade são executados durante o Modo Garagem.
O código a seguir mostra como agendar um trabalho para execução durante o modo 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());
Depurar modo Garagem
Para depurar o modo Garagem:- Para ativar categorias de registro relevantes para o Modo Garagem:
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 a saída do logcat para indicar que o Modo Garagem está iniciando:
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 se a saída do logcat indica que o Modo Garagem foi concluído (cancelado ou concluído):
[GarageMode]: GarageMode was canceled
ou[GarageMode]: GarageMode completed normally
O Modo Garagem depende do estado de energia do veículo conforme descrito acima.
- Revise a saída do logcat para indicar que os estados de energia corretos foram inseridos:
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