Congelador de aplicativos em cache

O Android 11 QPR3 ou superior é compatível com o congelador de aplicativos em cache. Esse recurso interrompe a execução de processos em cache e reduz o uso de recursos devido ao mau comportamento dos aplicativos que podem tentar operar enquanto estiverem em cache. A estrutura congela aplicativos em cache migrando seus processos para um cgroup congelado; isso reduz o consumo de CPU ativo e ocioso 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 enviados com um kernel compatível podem (opcionalmente) habilitá-lo. Para fazer isso, ative a opção do desenvolvedor "Suspender execução para 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 false ou a opção do desenvolvedor é 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 tem 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 o Process.java do ActivityManager e a API ActivityManagerService. Os desenvolvedores também podem consultar o código do cliente no ActivityManager para experimentos.

Manipulando recursos personalizados

Normalmente, não se espera que os processos funcionem quando armazenados em cache, mas alguns aplicativos podem ter recursos personalizados compatíveis com processos que devem ser executados 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 armazenado 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 fazer qualquer trabalho para permitir que o aplicativo para permanecer ativo.

Testando o freezer de aplicativos

Para verificar se o congelador de aplicativos está funcionando conforme o esperado, use os seguintes recursos:

  • Verifique uma lista de processos em cache em /dev/freezer/frozen/cgroup.procs .

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

  • Visualize 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 "\(freeze\|froze\)"