บิตแมปมักเป็นออบเจ็กต์ที่ใช้หน่วยความจำมากที่สุดในแอป การถอดรหัสและการ ดำเนินการปรับขนาดมักอยู่ในเส้นทางวิกฤตสำหรับการแสดงผลเฟรม การเพิ่มประสิทธิภาพการใช้งานหน่วยความจำบิตแมปจะช่วยปรับปรุงการตอบสนองของ UI, อายุการใช้งานแบตเตอรี่ และความเสถียรโดยรวมได้อย่างมากด้วยการลดอาการกระตุก, ANR และการสิ้นสุดกระบวนการที่เกี่ยวข้องกับ OOM
ระบุการใช้งานหน่วยความจำบิตแมปสูง
Android Vitals จะแสดงเมตริกเกี่ยวกับหน่วยความจำที่ใช้สำหรับบิตแมปของแอปโดยการรวบรวมข้อมูลจากอุปกรณ์ Android ระบบจะคำนวณเมตริกเหล่านี้เป็นสรุปข้อมูลรายวันในช่วง 28 วันโดยค่าเริ่มต้น ข้อมูลนี้ช่วยระบุแนวโน้มและการถดถอยที่อาจเกิดขึ้นในประสิทธิภาพของหน่วยความจำในอุปกรณ์ประเภทและเวอร์ชันต่างๆ
Android Vitals จะแชร์การใช้งานหน่วยความจำบิตแมปของแอปที่แบ่งตามสถานะกระบวนการต่อไปนี้
- เบื้องหน้า: กระบวนการของแอปจะปรากฏให้เห็น คาดว่า P99 จะสูงกว่ามากในเบื้องหน้าเมื่อเทียบกับสถานะกระบวนการอื่นๆ แต่ นักพัฒนาแอปควรตรวจสอบว่าอัตราส่วน P99/P50 มีนัยสำคัญหรือไม่ (เช่น สูงกว่า 3.5 เท่า) เนื่องจากมักจะบ่งชี้ถึงการรั่วไหลของหน่วยความจำบิตแมป คุณสามารถ ระบุได้โดยดูความแตกต่างระหว่างการใช้งานทั่วไป (P50) กับ การใช้งานที่ผิดปกติ (P99) ในขณะที่การขยายขนาดของชิ้นงานทั่วไปจะเพิ่มหน่วยความจำอย่างสม่ำเสมอ ในเปอร์เซ็นไทล์ทั้งหมด แต่หน่วยความจำรั่วจะเพิ่มขึ้นเมื่อเวลาผ่านไป ซึ่งจะทำให้ข้อมูลส่วนท้าย (P99) มีความเบ้สูง ตรวจสอบว่าการจัดสรรบิตแมปเบื้องหน้าไม่ได้คงอยู่ โดยไม่จำเป็นหลังจากที่แอปเปลี่ยนไปอยู่ในสถานะอื่นๆ
- บริการที่ผู้ใช้รับรู้: กระบวนการของแอปกำลังทำงานในสถานะที่รับรู้ได้ ซึ่งรวมถึงบริการที่ทำงานอยู่เบื้องหน้า งานที่เร่งด่วน และงานโอนข้อมูลที่เริ่มต้นโดยผู้ใช้ แอปต้องไม่เก็บการจัดสรรบิตแมปในเบื้องหน้าที่มีขนาดใหญ่เมื่อเปลี่ยนไปใช้สถานะเหล่านี้ เนื่องจาก บริการเหล่านี้ออกแบบมาสำหรับงานที่ใช้เวลานาน การเก็บเนื้อหาขนาดใหญ่ จะทำให้ประสบการณ์ของผู้ใช้โดยรวมแย่ลง และบังคับให้ Daemon การหยุดทำงานเนื่องจากหน่วยความจำไม่เพียงพอ (Low Memory Killer Daemon หรือ LMKD) เรียกคืนหน่วยความจำด้วยการสิ้นสุดกระบวนการที่มีลำดับความสำคัญต่ำกว่า
- เบื้องหลัง: แอปกำลังเรียกใช้บริการที่ทำงานอยู่เบื้องหลัง หรือเพิ่งเข้าสู่เบื้องหลังเมื่อเร็วๆ นี้ แต่ยังไม่ได้แคช เนื่องจากสถานะกระบวนการนี้มีความสำคัญน้อยกว่ากระบวนการที่ทำงานอยู่เบื้องหน้าหรือกระบวนการที่รับรู้ได้ แอปจึงควรปล่อยชิ้นงานบิตแมปขนาดใหญ่อย่างชัดเจนที่นี่เพื่อลดแรงกดดันด้านหน่วยความจำ
- แคช: แอปอยู่ในสถานะแคช สถานะนี้มีความไวสูงต่อ แรงกดดันด้านหน่วยความจำของระบบ เช่น LMK แอปต้องลดการใช้งานหน่วยความจำบิตแมป ในสถานะนี้อย่างจริงจังเพื่อหลีกเลี่ยงการนำออกโดยระบบปฏิบัติการ
สาเหตุที่ทำให้มีการใช้งานหน่วยความจำบิตแมปสูง
หน่วยความจำเสมือนที่ไม่เคยใช้ก็อาจรวมอยู่ในการคำนวณด้วย หากเห็นการใช้งานหน่วยความจำบิตแมปสูงอย่างไม่คาดคิด ให้ตรวจสอบว่าคุณไม่ได้จัดสรรหน่วยความจำที่ไม่ได้ใช้