Freezer aplikasi yang di-cache

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

Menerapkan pembekuan aplikasi

Pembekuan aplikasi yang di-cache memanfaatkan pembekuan cgroup v2 kernel. Perangkat yang dikirim dengan kernel yang kompatibel dapat (secara opsional) mengaktifkannya. Untuk melakukannya, aktifkan opsi developer "Tunda 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

Pembekuan dinonaktifkan saat tanda use_freezer disetel ke salah (false) atau opsi developer dinonaktifkan. Anda dapat mengaktifkan atau menonaktifkan setelan ini dengan mengubah konfigurasi perangkat dalam rilis atau update software.

Pembekuan 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 kustom

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

Sebagai solusi sementara, 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 agar aplikasi tetap aktif.

Menguji pembekuan aplikasi

Untuk memverifikasi bahwa pembekuan aplikasi 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 keluar dari freezer. Contoh:

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