ข่าวสารผลิตภัณฑ์

การเตรียมแอปให้พร้อมสำหรับขีดจำกัดหน่วยความจำที่กว้างขึ้น

อ่าน 2 นาที
ดูโปรไฟล์ของ Blair Harmon
Blair Harmon ผู้อำนวยการฝ่ายการจัดการผลิตภัณฑ์ แพลตฟอร์ม Android

ประสบการณ์ของผู้ใช้ที่ยอดเยี่ยมเป็นหัวใจสำคัญของภารกิจของ Android และการทำตามสัญญาดังกล่าวต้องทำให้อุปกรณ์รวดเร็ว ตอบสนองได้ดี และเชื่อถือได้ ด้วยเหตุนี้ การเพิ่มประสิทธิภาพหน่วยความจำจึงมีความสำคัญมากกว่าที่เคย  ในระบบนิเวศ อุปกรณ์ใหม่ๆ ยังคงรักษาหรือแม้แต่ลดความจุหน่วยความจำจริงเพื่อตอบสนองต่อราคาหน่วยความจำที่เพิ่มขึ้น แต่ผู้ใช้ยังคงคาดหวังประสบการณ์การใช้งานแอปที่ราบรื่นและมีประสิทธิภาพสูงเช่นเดิม

ใน Android 17 เราได้เปิดตัวการจำกัดหน่วยความจำต่อแอป โดยเริ่มจากอุปกรณ์ Pixel เพื่อช่วยปกป้องประสบการณ์ของผู้ใช้โดยรวมจากแอปพลิเคชันที่ใช้หน่วยความจำมากเกินไปและทำให้ระบบช้าลงทั้งระบบ ในปีหน้า ผู้ผลิตจำนวนมากขึ้นจะใช้ประโยชน์จากขีดจำกัดหน่วยความจำต่อแอปของ Android ในการกำหนดค่า RAM ของอุปกรณ์ต่างๆ ตั้งแต่ 4 GB ไปจนถึงอุปกรณ์ที่มี RAM 16 GB ขึ้นไป หากแอปของคุณเกินขีดจำกัดเหล่านี้ ระบบจะลดความเร็วของแอปและอาจยกเลิกการใช้งาน การเพิ่มประสิทธิภาพการใช้หน่วยความจำของแอปเป็นสิ่งจำเป็นเพื่อป้องกันไม่ให้ระบบปฏิบัติการจำกัดอัตราการส่งข้อมูลและรักษาประสบการณ์ของผู้ใช้ให้ราบรื่น  

ในโพสต์นี้ เราจะมาดูว่าขีดจำกัดเหล่านี้ทำงานอย่างไรเบื้องหลัง วิธีวัดหน่วยความจำที่ใช้โดยใช้เมตริก Android Vitals ใหม่ และขั้นตอนที่นำไปใช้ได้จริงเพื่อเพิ่มประสิทธิภาพแอปหรือเกม

ทำความเข้าใจขีดจำกัดหน่วยความจำ 

เมื่อแอปใช้หน่วยความจำเกินงบประมาณ Android จะดำเนินการอย่างต่อเนื่องเพื่อปกป้องการตอบสนองของอุปกรณ์ ดังนี้

  1. การสลับ zRAM: หากแอปถึงขีดจำกัดที่จัดสรรไว้ ระบบจะบังคับให้หน้าเว็บของแอปไปอยู่ใน zRAM (RAM ที่บีบอัด)  แม้ว่า zRAM จะป้องกันการนำออกทันที แต่การบีบอัดและคลายการบีบอัดหน้าเว็บจะเพิ่มค่าใช้จ่ายของ CPU ซึ่งอาจส่งผลให้ UI ทำงานช้าลงอย่างเห็นได้ชัดและประสบการณ์การใช้งานช้าลง
  2. การสิ้นสุดกระบวนการ: หากแอปยังคงเพิ่มการใช้งานหน่วยความจำเกินเกณฑ์ zRAM ระบบจะสิ้นสุดกระบวนการของแอป  หากต้องการตรวจสอบว่าเซสชันแอปได้รับผลกระทบจากข้อจำกัดเหล่านี้ในฟิลด์หรือไม่ คุณสามารถเรียกใช้ getDescription() ภายใน ApplicationExitInfo  หากระบบใช้ขีดจำกัด ระบบจะรายงานเหตุผลในการออกเป็น REASON_OTHER และสตริงคำอธิบายจะมี "MemoryLimiter:AnonSwap"  คุณยังใช้การสร้างโปรไฟล์ตามทริกเกอร์ได้ด้วยTRIGGER_TYPE_ANOMALY เพื่อบันทึกฮีปดัมป์โดยอัตโนมัติเมื่อถึงขีดจำกัดของหน่วยความจำ  

ดูข้อมูลเพิ่มเติมเกี่ยวกับขีดจำกัดหน่วยความจำต่อแอปและการบังคับใช้ของระบบได้ในเอกสารประกอบเกี่ยวกับขีดจำกัดหน่วยความจำของแอปใน Android 17 หากต้องการทดสอบแอปพลิเคชันในการกำหนดค่าอุปกรณ์ต่างๆ ให้ใช้คำสั่ง adb ของ Memory Limiter 

การตรวจสอบและการวินิจฉัยปัญหาเกี่ยวกับหน่วยความจำ

คุณไม่สามารถเพิ่มประสิทธิภาพสิ่งที่วัดค่าไม่ได้ การระบุหน่วยความจำรั่ว การจัดสรรฮีปมากเกินไป และข้อขัดข้องเนื่องจากหน่วยความจำไม่เพียงพอ (OOM) ในระบบนิเวศ Android ต้องใช้เครื่องมือตรวจสอบเสริม

  • สุขภาพระดับมหภาคด้วย Android Vitals: Android Vitals ของ Google Play Console มีเมตริกที่สำคัญ เช่น การใช้งานหน่วยความจำ (RSS แบบไม่ระบุตัวตน + Swap) และการใช้งานหน่วยความจำบิตแมป เพื่อให้มองเห็นภาพรวมระดับประชากรโดยไม่ต้องมีค่าใช้จ่ายเพิ่มเติม ซึ่งจะช่วยให้คุณเห็นภาพรวมที่ชัดเจนของการกระจายหน่วยความจำในสถานะกระบวนการต่างๆ (เบื้องหน้า เบื้องหลัง บริการที่ผู้ใช้รับรู้ และแคช) และช่วงคลาส RAM ซึ่งจะช่วยให้คุณระบุค่าผิดปกติของหน่วยความจำได้
  • การออกจากการจำกัดหน่วยความจำและการติดตาม OOM ด้วย Firebase Crashlytics: Crashlytics เวอร์ชัน 20.1.0 มีข้อมูลการแก้ไขข้อบกพร่องเพิ่มเติมเพื่อช่วยให้คุณตรวจจับ จัดลำดับความสำคัญ และแก้ไขข้อยกเว้น Out-Of-Memory และการปิดการจำกัดหน่วยความจำได้ เพื่อให้คุณทราบถึงการเสื่อมของหน่วยความจำอย่างรุนแรงก่อนที่จะส่งผลต่อเมตริกหลัก การติดตามเหตุการณ์เหล่านี้ควบคู่ไปกับบันทึกที่กำหนดเองและข้อมูลเมตาของคีย์-ค่าจะช่วยให้คุณทราบบริบทของสถานะกระบวนการได้ทันทีเมื่อเกิดข้อผิดพลาดเกี่ยวกับหน่วยความจำ
  • การติดตามในฟิลด์ด้วย ProfilingManager: สำหรับทีมที่สามารถดูแลเฟรมเวิร์กความสามารถในการสังเกตประสิทธิภาพ ProfilingManager API ที่เปิดตัวใน Android 15 (ระดับ API 35) จะช่วยให้แอปของคุณขอและรวบรวมอาร์ติแฟกต์การแก้ไขข้อบกพร่องของหน่วยความจำแบบเป็นโปรแกรมได้ เช่น ฮีปดัมป์ของ Java และโปรไฟล์ฮีปจากอุปกรณ์ที่ใช้งานจริงโดยตรง นอกจากนี้ คุณยังทริกเกอร์การจับภาพฮีปดัมป์ตามสัญญาณของระบบที่เฉพาะเจาะจงได้ด้วย เช่น TRIGGER_TYPE_OOM และ TRIGGER_TYPE_ANOMALY 

อ่านข้อมูลเพิ่มเติมเกี่ยวกับเทคนิคการตรวจสอบหน่วยความจำอื่นๆ ได้ในเอกสารประกอบ

สรุปและขั้นตอนถัดไป

เมื่อ Android ขยายขีดจำกัดหน่วยความจำต่อแอปใน RAM ทุกคลาส ตอนนี้จึงเป็นเวลาที่เหมาะสมในการตรวจสอบหน่วยความจำที่ใช้

  1. ให้ความสำคัญกับการเพิ่มประสิทธิภาพหน่วยความจำ: ป้องกันไม่ให้แอปได้รับผลกระทบจากขีดจำกัดหน่วยความจำของแอปโดยใช้แนวทางปฏิบัติแนะนำ 
  2. ตรวจสอบการใช้หน่วยความจำตรวจสอบลักษณะการทำงานของหน่วยความจำของแอปเพื่อตรวจหาและแก้ไขลักษณะการทำงานที่ผิดปกติ  
  3. เพิ่มประสิทธิภาพเกม: ทำตามคำแนะนำล่าสุดสำหรับเกมและแอปมัลติมีเดียที่ซับซ้อนเพื่อประหยัดหน่วยความจำสูงสุดในสถานะของกระบวนการต่างๆ

แหล่งข้อมูลและการอ้างอิงที่เป็นประโยชน์

เขียนโดย
อ่านต่อ