O Android 11 QPR3 ou mais recente oferece suporte ao congelamento de apps em cache. Esse recurso interrompe a execução de processos em cache e reduz o uso de recursos por apps com comportamento incorreto que podem tentar operar em cache. O framework congela apps em cache migrando os processos para um cgroup congelado. Isso reduz o consumo de CPU ativo e inativo na presença de apps em cache ativos. O freezer 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 aproveita o freezer cgroup v2 do kernel. Os dispositivos enviados
com um kernel compatível podem (opcionalmente) ativá-lo. Para fazer isso, ative a
opção do desenvolvedor "Suspender execução para 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 freezer é desativado quando a flag use_freezer
é definida como falsa ou a
opção de desenvolvedor é desativada. É possível ativar ou desativar essa configuração mudando uma configuração
do dispositivo em uma versão ou atualização do software.
O apps freezer 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 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, os processos não precisam fazer nenhum trabalho quando estão em cache, mas alguns apps podem ter recursos personalizados com suporte de processos que precisam ser executados em cache. Quando o congelamento de apps está ativado em um dispositivo que executa esse app, os processos em cache são congelados e podem impedir que os recursos personalizados funcionem.
Como solução alternativa, se um app tiver um processo que precise realizar atividades enquanto está em cache, mude o status do processo para "sem cache" (como Bound ForeGround Service (BFGS) ou em primeiro plano) antes que o processo precise fazer qualquer trabalho para permitir que o app permaneça ativo.
Testar o congelamento de apps
Para verificar se o congelamento de apps está funcionando conforme o esperado, use estes recursos:
Verifique uma lista de processos congelados usando o comando
adb shell dumpsys activity
e o grep paraApps frozen:
.Verifique a presença do arquivo
/sys/fs/cgroup/uid_0/cgroup.freeze
.Acesse 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\)"