O Android 11 QPR3 ou versões mais recentes oferecem suporte ao congelador de apps em cache. Esse recurso interrompe a execução de processos em cache e reduz o uso de recursos por apps com comportamento inadequado que podem tentar operar enquanto estão em cache. O framework congela os apps em cache migrando os processos deles para um cgroup congelado. Isso reduz o consumo de CPU ativa e ociosa na presença de apps ativos em cache. O congelador de apps pode ser ativado usando uma flag de configuração do sistema ou uma opção de desenvolvedor.
Implementar o freezer de apps
O freezer de apps em cache usa o freezer cgroup v2 do kernel. Os dispositivos enviados com um kernel compatível podem (opcionalmente) ativá-lo. Para isso, ative a opção do desenvolvedor "Suspender a execução de apps em cache" ou defina a flag de configuração do dispositivo activity_manager_native_boot use_freezer
como true
. Exemplo:
adb shell device_config put activity_manager_native_boot use_freezer true && adb reboot
O congelador é desativado quando a flag use_freezer
é definida como "false" ou quando a opção
de desenvolvedor é desativada. É possível ativar ou desativar essa configuração mudando a configuração de um dispositivo em uma versão ou atualização de software.
O congelador de apps não expõe APIs oficiais (e não tem um cliente de implementação
de referência), mas usa as APIs de sistema ocultas setProcessFrozen
e enableFreezer
. Para mais detalhes sobre essas APIs, consulte Process.java
do ActivityManager e a API ActivityManagerService. Os desenvolvedores também podem consultar o código do cliente em ActivityManager
para experimentos.
Processar recursos personalizados
Normalmente, não se espera que os processos façam nada quando estão em cache, mas alguns apps podem ter recursos personalizados compatíveis com processos que devem ser executados enquanto estão em cache. Quando o congelador de apps está ativado em um dispositivo que executa um app desse tipo, os processos em cache são congelados e podem impedir que recursos personalizados funcionem.
Como alternativa, se um app tiver um processo que precise realizar atividades em cache, mude o status do processo para não armazenado em cache (como Bound ForeGround Service [BFGS] ou em primeiro plano) antes que ele precise fazer qualquer trabalho para permitir que o app permaneça ativo.
Testar o congelador de apps
Para verificar se o congelador de apps está funcionando conforme o esperado, use os seguintes recursos:
Verifique uma lista de processos congelados usando o comando
adb shell dumpsys activity
e grep paraApps frozen:
.Verifique a presença do arquivo
/sys/fs/cgroup/uid_0/cgroup.freeze
.Veja o logcat, que mostra entradas congeladas e descongeladas sempre que um processo migra para dentro ou para fora do freezer. Exemplo:
adb logcat | grep -i "\(freezing\|froze\)"