Freezer aplikasi yang di-cache

Android 11 QPR3 atau yang lebih tinggi mendukung freezer aplikasi yang di-cache. Fitur ini menghentikan eksekusi untuk proses yang di-cache dan mengurangi penggunaan resource oleh aplikasi yang berperilaku buruk yang mungkin mencoba beroperasi saat di-cache. Framework ini membekukan aplikasi yang di-cache dengan memigrasikan prosesnya ke cgroup beku; hal ini mengurangi konsumsi CPU aktif dan tidak ada aktivitas saat ada aplikasi yang di-cache dan aktif. Penghenti aplikasi dapat diaktifkan menggunakan tanda konfigurasi sistem atau opsi developer.

Mengimplementasikan freezer aplikasi

Penghenti aplikasi yang di-cache memanfaatkan penghenti cgroup v2 kernel. Perangkat yang mengirim kernel yang kompatibel dapat (secara opsional) mengaktifkannya. Untuk melakukannya, aktifkan opsi developer "Menangguhkan eksekusi untuk aplikasi yang di-cache" atau tetapkan tanda konfigurasi perangkat activity_manager_native_boot use_freezer ke true. Contoh:

adb shell device_config put activity_manager_native_boot use_freezer true && adb reboot

Pengontrol dinonaktifkan saat flag use_freezer ditetapkan ke salah (false) atau opsi developer dinonaktifkan. Anda dapat mengalihkan setelan ini dengan mengubah konfigurasi perangkat dalam rilis atau update software.

Freezer aplikasi tidak mengekspos API resmi (dan tidak memiliki klien implementasi referensi), tetapi menggunakan API sistem tersembunyi setProcessFrozen dan enableFreezer. Untuk mengetahui detail tentang API ini, lihat Process.java ActivityManager dan ActivityManagerService API. Developer juga dapat merujuk ke kode klien di ActivityManager untuk eksperimen.

Menangani fitur khusus

Biasanya, proses tidak diharapkan untuk melakukan pekerjaan apa pun saat di-cache, tetapi beberapa aplikasi mungkin memiliki fitur kustom yang didukung oleh proses yang diharapkan untuk berjalan saat di-cache. Jika aplikasi freezer diaktifkan di perangkat yang menjalankan aplikasi tersebut, proses yang di-cache akan dibekukan dan dapat mencegah fitur kustom berfungsi.

Sebagai solusi, jika aplikasi memiliki proses yang perlu melakukan aktivitas saat di-cache, ubah status proses menjadi tidak di-cache (seperti Bound ForeGround Service (BFGS) atau latar depan) sebelum proses perlu melakukan pekerjaan apa pun untuk memungkinkan aplikasi tetap aktif.

Menguji freezer aplikasi

Untuk memverifikasi bahwa app freezer berfungsi sebagaimana mestinya, gunakan referensi berikut:

  • Periksa daftar proses yang dibekukan menggunakan perintah adb shell dumpsys activity dan grep untuk Apps frozen:.

  • Periksa keberadaan file /sys/fs/cgroup/uid_0/cgroup.freeze.

  • Lihat logcat, yang menampilkan entri yang dibekukan dan tidak dibekukan setiap kali proses bermigrasi ke dalam atau ke luar freezer. Contoh:

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