Congelatore di app memorizzate nella cache

Android 11 QPR3 o versione successiva supporta il congelamento delle app memorizzate nella cache. Questa funzionalità interrompe l'esecuzione dei processi memorizzati nella cache e riduce l'utilizzo delle risorse da parte di app che si comportano in modo anomalo e che potrebbero tentare di funzionare mentre sono memorizzate nella cache. Il framework blocca le app memorizzate nella cache migrando i loro processi in un cgroup congelato; questo riduce il consumo di CPU attivo e inattivo in presenza di app attive nella cache. Il congelamento delle app può essere abilitato utilizzando un flag di configurazione del sistema o un'opzione sviluppatore.

Implementa il congelatore delle app

Il congelatore delle app memorizzate nella cache sfrutta il congelatore del kernel cgroup v2. I dispositivi forniti con un kernel compatibile possono (facoltativamente) abilitarlo. Per fare ciò, abilita l'opzione sviluppatore "Sospendi l'esecuzione per le app memorizzate nella cache" o imposta il flag di configurazione del dispositivo activity_manager_native_boot use_freezer su true . Per esempio:

adb shell device_config put activity_manager_native_boot use_freezer true && adb reboot

Il congelatore è disabilitato quando il flag use_freezer è impostato su false o l'opzione sviluppatore è disabilitata. È possibile attivare/disattivare questa impostazione modificando la configurazione di un dispositivo in una versione o aggiornamento del software.

Il congelatore di app non espone le API ufficiali (e non dispone di un client di implementazione di riferimento), ma utilizza le API di sistema nascoste setProcessFrozen e enableFreezer . Per dettagli su queste API, fare riferimento a Process.java di ActivityManager e all'API ActivityManagerService. Gli sviluppatori possono anche fare riferimento al codice client in ActivityManager per gli esperimenti.

Gestire funzionalità personalizzate

In genere, non è previsto che i processi eseguano alcuna operazione quando memorizzati nella cache, ma alcune app potrebbero avere funzionalità personalizzate supportate da processi che dovrebbero essere eseguiti durante la memorizzazione nella cache. Quando il congelamento delle app è abilitato su un dispositivo che esegue tale app, i processi memorizzati nella cache vengono bloccati e potrebbero impedire il funzionamento delle funzionalità personalizzate.

Come soluzione alternativa, se un'app dispone di un processo che deve eseguire attività mentre è memorizzato nella cache, modificare lo stato del processo in non memorizzato nella cache (ad esempio Bound ForeGround Service (BFGS) o in primo piano) prima che il processo debba eseguire qualsiasi operazione per consentire all'app per rimanere attivo.

Prova il congelatore delle app

Per verificare che il congelatore dell'app funzioni come previsto, utilizza le seguenti risorse:

  • Controlla un elenco di processi bloccati utilizzando il comando adb shell dumpsys activity e grep la parola chiave Frozen .

  • Verificare la presenza del file /sys/fs/cgroup/uid_0/cgroup.freeze .

  • Visualizza logcat, che mostra le voci congelate e sbloccate ogni volta che un processo migra dentro o fuori dal congelatore. Per esempio:

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