หากคุณต้องใช้ (และรักษา) android:largeHeap="true"
จำนวนมากของหน่วยความจำแล้วใช่คุณสามารถและควรจะใช้ แต่ถ้าคุณใช้งานคุณควรเตรียมพร้อมที่จะให้แอปของคุณล้างออกจากหน่วยความจำเมื่อใดก็ตามที่แอปอื่น ๆ อยู่เบื้องหน้า
เมื่อ "เตรียมพร้อม" ฉันหมายความว่าคุณควรออกแบบให้เหมาะกับความเป็นไปได้นั้นเพื่อให้การเขียนonStop()
และonResume()
วิธีการของคุณมีประสิทธิภาพมากที่สุดในขณะเดียวกันก็มั่นใจได้ว่าสถานะที่เกี่ยวข้องทั้งหมดจะได้รับการบันทึกและเรียกคืนในลักษณะที่แสดงลักษณะที่ราบรื่นต่อผู้ใช้
มีสามวิธีที่เกี่ยวข้องกับพารามิเตอร์นี้: maxMemory()
, และ getMemoryClass()
getLargeMemoryClass()
สำหรับอุปกรณ์ส่วนใหญ่maxMemory()
จะแสดงค่าที่ใกล้เคียงกับค่าgetMemoryClass()
เริ่มต้นแม้ว่าค่าหลังจะแสดงเป็นเมกะไบต์ในขณะที่อุปกรณ์เก่าจะแสดงเป็นไบต์
เมื่อคุณใช้largeHeap
พารามิเตอร์maxMemory()
จะเพิ่มเป็นระดับที่สูงขึ้นเฉพาะอุปกรณ์ในขณะที่getMemoryClass()
จะยังคงเหมือนเดิม
getMemoryClass()
ไม่ได้ จำกัด ขนาดฮีปของคุณ แต่จะบอกให้คุณทราบจำนวนฮีปที่คุณควรใช้หากคุณต้องการให้แอปของคุณทำงานได้อย่างสะดวกสบายและเข้ากันได้ภายในขีด จำกัด ของอุปกรณ์ที่คุณใช้งานอยู่
maxMemory()
ในทางตรงกันข้ามจะจำกัด ขนาดฮีปของคุณดังนั้นคุณจะสามารถเข้าถึงฮีปเพิ่มเติมได้โดยการเพิ่มมูลค่าและlargeHeap
เพิ่มมูลค่านั้น อย่างไรก็ตามจำนวนฮีปที่เพิ่มขึ้นยังคงมีอยู่อย่าง จำกัด และขีด จำกัด นั้นจะเป็นแบบเฉพาะอุปกรณ์ซึ่งหมายความว่าจำนวนฮีปที่มีให้ในแอปของคุณจะแตกต่างกันไปขึ้นอยู่กับทรัพยากรของอุปกรณ์ที่แอปของคุณกำลังทำงานอยู่ ดังนั้นการใช้largeHeap
ไม่ได้เป็นการเชิญชวนให้แอปของคุณละทิ้งความระมัดระวังทั้งหมดและหลีกเลี่ยงการรับประทานบุฟเฟ่ต์แบบไม่อั้น
แอปของคุณสามารถค้นพบว่าวิธีการที่หน่วยความจำมากจะทำให้สามารถใช้ได้ในอุปกรณ์โดยเฉพาะอย่างยิ่งผ่านการใช้พารามิเตอร์โดยเรียกวิธีการlargeHeap
getLargeMemoryClass()
ค่าที่ส่งคืนเป็นเมกะไบต์
โพสต์ก่อนหน้านี้มีการอภิปรายเกี่ยวกับlargeHeap
พารามิเตอร์รวมถึงตัวอย่างจำนวนฮีปที่สามารถใช้ได้โดยมีและไม่มีการใช้งานบนอุปกรณ์ Android บางรุ่น:
ตรวจจับขนาดฮีปของแอปพลิเคชันใน Android
ฉันไม่ได้ปรับใช้แอปใด ๆ ของตัวเองโดยตั้งค่าพารามิเตอร์นี้เป็น true อย่างไรก็ตามฉันมีรหัสที่ต้องใช้หน่วยความจำมากในหนึ่งในแอปของฉันสำหรับรวบรวมชุดพารามิเตอร์ที่เกี่ยวข้องกับการปรับให้เหมาะสมซึ่งทำงานระหว่างการพัฒนาเท่านั้น ฉันเพิ่มlargeHeap
พารามิเตอร์ในระหว่างการพัฒนาเท่านั้นเพื่อหลีกเลี่ยงข้อผิดพลาดของหน่วยความจำในขณะที่เรียกใช้รหัสนี้ แต่ฉันลบพารามิเตอร์ (และรหัส) ก่อนที่จะปรับใช้แอป