Congelador de aplicativos em cache

O Android 11 QPR3 ou superior oferece suporte ao congelador de aplicativos em cache. Esse recurso interrompe a execução de processos em cache e reduz o uso de recursos ao comportar mal aplicativos que podem tentar operar enquanto estão em cache. A estrutura congela aplicativos em cache migrando seus processos para um cgroup congelado; isso reduz o consumo de CPU ativa e ociosa na presença de aplicativos ativos em cache. O congelador de aplicativos pode ser ativado usando um sinalizador de configuração do sistema ou uma opção do desenvolvedor.

Implementando o freezer de aplicativos

O freezer de aplicativos em cache aproveita o freezer cgroup v2 do kernel. Dispositivos fornecidos com um kernel compatível podem (opcionalmente) habilitá-lo. Para fazer isso, habilite a opção do desenvolvedor "Suspender execução de aplicativos em cache" ou defina o sinalizador de configuração do dispositivo activity_manager_native_boot use_freezer como true . Por exemplo:

adb shell device_config put activity_manager_native_boot use_freezer true && adb reboot

O freezer é desabilitado quando o sinalizador use_freezer é definido como falso ou a opção do desenvolvedor está desabilitada. Você pode alternar essa configuração alterando a configuração de um dispositivo em uma versão ou atualização de software.

O freezer de aplicativos não expõe APIs oficiais (e não possui um cliente de implementação de referência), mas usa as APIs de sistema ocultas setProcessFrozen e enableFreezer . Para obter detalhes sobre essas APIs, consulte Process.java do ActivityManager e API ActivityManagerService. Os desenvolvedores também podem consultar o código do cliente no ActivityManager para experimentos.

Lidando com recursos personalizados

Normalmente, não se espera que os processos funcionem quando armazenados em cache, mas alguns aplicativos podem ter recursos personalizados suportados por processos que devem ser executados enquanto armazenados em cache. Quando o congelador de aplicativos está ativado em um dispositivo que executa esse aplicativo, os processos em cache são congelados e podem impedir o funcionamento de recursos personalizados.

Como solução alternativa, se um aplicativo tiver um processo que precise executar atividades enquanto estiver em cache, altere o status do processo para não armazenado em cache (como Bound ForeGround Service (BFGS) ou primeiro plano) antes que o processo precise realizar qualquer trabalho para permitir que o aplicativo para permanecer ativo.

Testando o freezer de aplicativos

Para verificar se o app freezer está funcionando conforme esperado, use os seguintes recursos:

  • Verifique se há uma lista de processos congelados usando o comando adb shell dumpsys activity e grep a palavra-chave Frozen .

  • Verifique a presença do arquivo /sys/fs/cgroup/uid_0/cgroup.freeze .

  • Veja o logcat, que mostra entradas congeladas/descongeladas cada vez que um processo migra para dentro ou para fora do freezer. Por exemplo:

    adb logcat | grep -i "\(freezing\|froze\)"