Jika Anda harus menggunakan (dan mempertahankan) memori dalam jumlah besar, maka ya, Anda dapat dan harus menggunakan android:largeHeap="true"
. Namun jika Anda menggunakannya, Anda harus siap untuk menghapus aplikasi Anda dari memori setiap kali aplikasi lain berada di latar depan.
Yang saya maksud dengan "bersiaplah" adalah Anda harus merancang kemungkinan itu, sehingga metode onStop()
dan Anda onResume()
ditulis seefisien mungkin, sambil memastikan bahwa semua status terkait disimpan dan dipulihkan dengan cara yang menghadirkan tampilan yang mulus bagi pengguna.
Ada tiga metode yang berhubungan dengan parameter ini: maxMemory()
, getMemoryClass()
, dan getLargeMemoryClass()
.
Untuk sebagian besar perangkat, maxMemory()
akan mewakili nilai yang mirip getMemoryClass()
dengan default, meskipun yang terakhir dinyatakan dalam megabyte, sedangkan yang pertama dinyatakan dalam byte.
Saat Anda menggunakan largeHeap
parameter, maxMemory()
akan ditingkatkan ke tingkat yang lebih tinggi khusus perangkat, sementara getMemoryClass()
akan tetap sama.
getMemoryClass()
tidak membatasi ukuran heap Anda, tetapi ini memberi tahu Anda jumlah heap yang harus Anda gunakan jika Anda ingin aplikasi berfungsi dengan nyaman dan kompatibel dalam batasan perangkat tertentu tempat Anda menjalankan.
maxMemory()
Sebaliknya, tidak membatasi ukuran tumpukan Anda, dan sehingga Anda mendapatkan akses ke tumpukan tambahan melalui peningkatan nilai, dan largeHeap
melakukan peningkatan yang nilai. Namun, peningkatan jumlah heap masih terbatas, dan batasan itu akan spesifik perangkat, yang berarti jumlah heap yang tersedia untuk aplikasi Anda akan bervariasi, bergantung pada sumber daya perangkat tempat aplikasi Anda berjalan. Jadi, menggunakan largeHeap
bukanlah ajakan bagi aplikasi Anda untuk mengabaikan semua kehati-hatian dan mencari jalan melalui prasmanan makan sepuasnya.
Aplikasi Anda dapat menemukan dengan tepat berapa banyak memori yang akan disediakan pada perangkat tertentu melalui penggunaan largeHeap
parameter dengan memanggil metode getLargeMemoryClass()
. Nilai yang dikembalikan dalam megabyte.
Posting sebelumnya ini menyertakan diskusi tentang largeHeap
parameter, serta sejumlah contoh tentang jumlah heap yang tersedia dengan dan tanpa penggunaannya, di beberapa perangkat Android tertentu:
Mendeteksi ukuran heap aplikasi di Android
Saya belum menerapkan aplikasi saya sendiri dengan parameter ini disetel ke true. Namun, saya memiliki beberapa kode intensif memori di salah satu aplikasi saya untuk menyusun serangkaian parameter terkait pengoptimalan, yang hanya berjalan selama pengembangan. Saya menambahkan largeHeap
parameter hanya selama pengembangan, untuk menghindari kesalahan memori saat menjalankan kode ini. Tapi saya menghapus parameter (dan kode) sebelum menerapkan aplikasi.