Para oferecer períodos de inatividade nos veículos, o modo garagem mantém o sistema
acordado para que empregos
JobScheduler
limitado com
inatividade pode ser executado.
O que é o modo garagem?
Em dispositivos conectados, como smartphones, os usuários dependem do sistema para garantir que os dispositivos estejam estáveis, atualizados e otimizados. Para atingir esse estado, a plataforma Android oferece um inativo hora janela em que os apps podem realizar tarefas quando o usuário não interagem com o dispositivo. Um smartphone é considerado inativo quando o usuário não toca por um período prolongado (60 minutos ou mais) e a tela estiver desligada. Ao contrário de um smartphone, quando um carro não está sendo usado, ele fica desligado, o que significa que o carro não tem tempo de inatividade janela. O modo garagem garante o tempo de inatividade no carro.
Quando um carro é desligado pelo usuário, o sistema entra no modo garagem. Enquanto um
o carro está no modo garagem, o sistema está ligado, a tela está desligada e
jobs inativos na fila 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 eficaz, a VHAL precisa especificar os dois
parâmetros (estado e o parâmetro adicional) para o comando AP_POWER_STATE_REQ
. Isso permite que o dispositivo
entre no modo garagem,
que detecta jobs programados em
JobScheduler
e impede que o sistema prossiga para a suspensão ou o encerramento até que os jobs
forem concluídas.
Como as implementações de dispositivos se conectam ao framework do Android?
Para o modo garagem, o framework solicita que a VHAL aumente o tempo de encerramento. até que a duração necessária seja excedida ou todos os jobs sejam executados, Quando o sistema é desligado, Sob circunstâncias específicas definidas no CDD, as implementações de dispositivos podem desligar o sistema mais cedo. Para mais detalhes sobre os requisitos de compatibilidade do Android, consulte a documentação Documento de definição de compatibilidade (CDD).
Se a VHAL precisar desligar o sistema antes que o modo garagem seja concluído, a VHAL poderá emitir
SHUTDOWN_PREPARE
com o parâmetro definido como
SHUTDOWN_IMMEDIATELY
ou SLEEP_IMMEDIATELY
. Dispositivo
implementações podem usá-lo em circunstâncias específicas apenas, normalmente
quando os recursos necessários para manter o sistema em execução não estiverem disponíveis. Para
por exemplo, quando a capacidade da bateria é insuficiente.
Figura 1. Fluxo do modo garagem
Como os desenvolvedores de apps trabalham com o modo garagem?
Apps e serviços não interagem diretamente com o modo garagem. Em vez disso,
apps agendam jobs em
JobScheduler
Esses jobs restritos por
idleness são executados durante o modo garagem.
O código a seguir mostra como programar uma tarefa para ser executada no modo garagem:
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 as 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 analisar a saída do logcat e indicar que o modo garagem está sendo iniciado:
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):
ou[GarageMode]: GarageMode was canceled
[GarageMode]: GarageMode completed normally
O modo garagem depende da potência do veículo, conforme descrito acima.
- Confira 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