Congelatore di app memorizzate nella cache

Android 11 QPR3 o versioni successive supporta il blocco 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 con comportamenti errati che potrebbero tentare di funzionare mentre sono memorizzate nella cache. Il framework blocca le app memorizzate nella cache eseguendo la migrazione dei relativi processi in un cgroup bloccato, il che riduce il consumo della CPU attiva e inattiva in presenza di app memorizzate nella cache attive. Il blocco delle app può essere attivato utilizzando un flag di configurazione di sistema o un'opzione per gli sviluppatori.

Implementare il freezer delle app

Il blocco delle app in cache sfrutta il blocco cgroup v2 del kernel. I dispositivi con un kernel compatibile possono (facoltativamente) attivarlo. A tale scopo, attiva l'opzione per sviluppatori "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. Ad esempio:

adb shell device_config put activity_manager_native_boot use_freezer true && adb reboot

Il blocco è disattivato quando il flag use_freezer è impostato su false o se l'opzione sviluppatore è disattivata. Puoi attivare/disattivare questa impostazione modificando la configurazione di un dispositivo in una release o in un aggiornamento software.

Il blocco delle app non espone API ufficiali (e non ha un client di implementazione di riferimento), ma utilizza le API di sistema nascoste setProcessFrozen e enableFreezer. Per informazioni dettagliate su queste API, consulta Process.java di ActivityManager e l'API ActivityManagerService. Gli sviluppatori possono anche fare riferimento al codice client in ActivityManager per gli esperimenti.

Gestire le funzionalità personalizzate

In genere, non è previsto che i processi svolgano alcun lavoro quando sono memorizzati nella cache, ma alcune app potrebbero avere funzionalità personalizzate supportate da processi che devono essere eseguiti mentre sono memorizzati nella cache. Quando il blocco delle app è attivo su un dispositivo su cui è in esecuzione un'app di questo tipo, i processi memorizzati nella cache vengono bloccati e potrebbero impedire il funzionamento delle funzionalità personalizzate.

Come soluzione alternativa, se un'app ha un processo che deve eseguire attività mentre è memorizzata nella cache, imposta lo stato del processo su 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 di rimanere attiva.

Testa il blocco delle app

Per verificare che il freezer dell'app funzioni come previsto, usa le seguenti risorse:

  • Verifica la presenza di un elenco di processi bloccati utilizzando il comando adb shell dumpsys activity e grep per Apps frozen:.

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

  • Visualizza logcat, che mostra le voci bloccate e sbloccate ogni volta che un processo viene migrato all'interno o all'esterno del freezer. Ad esempio:

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