Bitmap sering kali menjadi objek yang paling banyak menggunakan memori dalam aplikasi. Operasi decoding dan penskalaan sering kali berada di jalur penting untuk rendering frame. Mengoptimalkan penggunaan memori bitmap memberikan peningkatan signifikan dalam responsivitas UI, daya tahan baterai, dan stabilitas keseluruhan dengan mengurangi jank, ANR, dan penghentian proses terkait OOM.
Mengidentifikasi penggunaan memori bitmap yang tinggi
Android vitals menyediakan metrik tentang jejak memori bitmap aplikasi dengan menggabungkan data dari perangkat Android. Metrik ini dihitung sebagai ringkasan data harian selama 28 hari secara default. Data ini membantu mengidentifikasi tren dan potensi regresi efisiensi memori di berbagai jenis dan versi perangkat.
Android vitals membagikan penggunaan memori bitmap aplikasi Anda yang dikelompokkan berdasarkan status proses berikut:
- Latar depan: Proses aplikasi terlihat. P99 diperkirakan akan jauh lebih tinggi di latar depan dibandingkan di status proses lainnya, tetapi developer harus menyelidiki jika rasio P99/P50 signifikan (misalnya, lebih tinggi dari 3,5x), karena hal ini sering kali menunjukkan kebocoran memori bitmap. Anda dapat mengidentifikasinya dengan mencari perbedaan antara penggunaan umum (P50) dan penggunaan pencilan (P99); meskipun pembengkakan aset umum meningkatkan memori secara seragam di semua persentil, kebocoran memori akan bertambah seiring waktu, sehingga sangat memiringkan data ujung (P99). Pastikan alokasi bitmap latar depan tidak tetap ada tanpa perlu setelah aplikasi bertransisi ke status lain.
- Layanan yang terlihat oleh pengguna: Proses aplikasi berjalan dalam status dapat dirasakan. Hal ini mencakup layanan latar depan, tugas yang dipercepat, dan tugas transfer data yang dimulai oleh pengguna. Aplikasi tidak boleh mempertahankan alokasi bitmap latar depan yang berat saat bertransisi ke status ini. Karena layanan ini dirancang untuk tugas yang berjalan lama, mempertahankan aset besar akan menurunkan pengalaman pengguna secara keseluruhan dan memaksa Daemon Low Memory Killer (LMKD) untuk merebut kembali memori dengan menghentikan proses berprioritas lebih rendah.
- Latar belakang: Aplikasi menjalankan layanan latar belakang, atau baru-baru ini dijalankan di latar belakang, tetapi belum di-cache. Karena status proses ini kurang penting daripada proses latar depan atau yang dapat dirasakan, aplikasi harus secara eksplisit melepaskan aset bitmap besar di sini untuk mengurangi tekanan memori.
- Di-cache: Aplikasi berada dalam status di-cache. Status ini sangat sensitif terhadap tekanan memori sistem seperti LMK. Aplikasi harus secara proaktif mengurangi penggunaan memori bitmap dalam status ini untuk menghindari pengusiran oleh OS.
Penyebab penggunaan memori bitmap yang tinggi
Memori virtual yang tidak pernah digunakan juga dapat disertakan dalam penghitungan. Jika Anda melihat penggunaan memori bitmap yang sangat tinggi secara tidak terduga, pastikan Anda tidak mengalokasikan memori yang tidak digunakan.