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 untukApps 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\)"