Penggunaan memori bitmap

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.

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.

Resource

Menganalisis bitmap di Android Studio

Pembuatan profil Android Studio untuk bitmap

Gunakan Memory Profiler untuk memeriksa alokasi memori secara real-time, merekam heap dump, dan menganalisis objek untuk kebocoran memori; selain itu, gunakan heap analyzer untuk mendeteksi kebocoran memori, mengidentifikasi alokasi bitmap duplikat, dan memvisualisasikan retensi objek.

Deteksi kebocoran otomatis dengan LeakCanary

Integrasikan library LeakCanary untuk mengotomatiskan deteksi kebocoran memori di aplikasi Anda. LeakCanary menyediakan analisis heap otomatis, mengidentifikasi objek yang seharusnya dikumpulkan sampah tetapi masih disimpan dalam memori, seperti bitmap yang dipertahankan oleh komponen yang dihancurkan.

Dokumentasi Performa Bitmap

Referensi ini memberikan panduan komprehensif tentang praktik terbaik untuk penanganan bitmap yang efisien di berbagai komponen Android.

Checklist developer untuk mengoptimalkan penggunaan memori bitmap

Untuk mengoptimalkan efisiensi memori bitmap, ikuti tiga prinsip inti: kurangi, gunakan ulang, dan daur ulang.

  • Kurangi: Minimalkan jejak memori awal saat memuat atau menampilkan bitmap.
  • Penggunaan kembali: Terapkan mekanisme penyimpanan ke cache untuk menghindari alokasi bitmap yang berlebihan.
  • Daur ulang: Melepaskan resource secara proaktif untuk memungkinkan realokasi memori untuk proses aktif.

Checklist developer berikut dapat membantu Anda mengoptimalkan penggunaan memori bitmap.

Prinsip Inti Area Deskripsi
Reduce Menghilangkan Bitmap Duplikat Analisis heap dump menggunakan Memory Profiler untuk mendeteksi alokasi bitmap yang berlebihan. Lihat panduan Mengelola Memori Bitmap.
Memanfaatkan Library Pemuatan Gambar Gunakan library seperti Glide dan Coil, untuk mengotomatiskan threading, caching, dan decoding yang efisien.
Menerapkan Penurunan Sampel Dekode gambar agar sesuai dengan dimensi penampung UI target, bukan memuat aset resolusi penuh.
Gunakan RGB_565 untuk Gambar Buram Kurangi jejak memori sebesar 50% dengan beralih dari ARGB_8888 ke konfigurasi 16-bit untuk gambar tanpa transparansi.
Memprioritaskan VectorDrawable Gunakan vektor untuk ikon dan grafik dasar guna memastikan penskalaan yang tajam dengan overhead memori minimal.
Mengoptimalkan Penayangan Gambar Sisi Server Konfigurasi API backend untuk menayangkan gambar yang disesuaikan dengan kepadatan perangkat dan dimensi penampung UI.
Menghilangkan Margin Transparan Hindari mengalokasikan memori untuk piksel "tidak terlihat" dengan menggunakan InsetDrawable atau padding tata letak, bukan margin bawaan. Lihat Membangun aplikasi Android yang berperforma tinggi dalam penggunaan memori.
Gunakan kembali Mengonfigurasi Ukuran Cache Optimal Menyesuaikan batas cache memori dan cache disk berdasarkan RAM perangkat dan resolusi layar. Lihat Menyimpan Cache Bitmap.
Daur Ulang Menghapus Permanen Resource di Latar Belakang Terapkan TRIM_MEMORY_BACKGROUND untuk menghapus cache dan meningkatkan kelangsungan proses selama tekanan memori sistem.
Melepaskan Aset saat UI Disembunyikan Gunakan TRIM_MEMORY_UI_HIDDEN untuk melepaskan cache bitmap saat aplikasi tidak lagi terlihat oleh pengguna.
Memantau Kebocoran Memori Gunakan LeakCanary dan Memory Profiler untuk menemukan bitmap yang dipertahankan setelah LifecycleOwner-nya dihancurkan. Lihat Mengelola memori aplikasi.