แนวทางปฏิบัติแนะนำเกี่ยวกับการจัดการหน่วยความจำ

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

เกริ่นนำ

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

เอกสารนี้จะอธิบายแนวทางปฏิบัติแนะนำเพื่อช่วยป้องกัน ตรวจจับ และแก้ไขการรั่วไหลของหน่วยความจำในโค้ด หากคุณได้ลองใช้วิธีการในเอกสารนี้แล้วและสงสัยว่าหน่วยความจำรั่วไหลใน SDK ของเรา โปรดดูวิธีรายงานปัญหาเกี่ยวกับ SDK ของ Google

ก่อนติดต่อทีมสนับสนุน

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

ป้องกันการรั่วไหลของหน่วยความจำ

ทําตามแนวทางปฏิบัติแนะนำเหล่านี้เพื่อหลีกเลี่ยงสาเหตุที่พบบ่อยที่สุดบางประการของการรั่วไหลของหน่วยความจำในโค้ดที่ใช้ Google SDK

แนวทางปฏิบัติที่ดีที่สุดสำหรับแอป Android

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

  1. ปล่อยทรัพยากรที่ไม่ได้ใช้
  2. ยกเลิกการลงทะเบียน Listener เมื่อไม่จำเป็นต้องใช้แล้ว
  3. ยกเลิกงานเมื่อไม่จำเป็น
  4. ส่งต่อเมธอดวงจรเพื่อปล่อยทรัพยากร
  5. ใช้ SDK เวอร์ชันล่าสุด

ดูรายละเอียดเฉพาะสำหรับแต่ละแนวทางปฏิบัติได้ในหัวข้อต่อไปนี้

ปล่อยทรัพยากรที่ไม่ได้ใช้งาน

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

เผยแพร่การอ้างอิง GoogleMap ที่ไม่มีอัปเดตใน GeoSDKs

ข้อผิดพลาดที่พบบ่อยคือ GoogleMap อาจทำให้หน่วยความจำรั่วไหลหากมีการแคชไว้โดยใช้ NavigationView หรือ MapView GoogleMap มีความสัมพันธ์แบบ 1 ต่อ 1 กับ NavigationView หรือ MapView ที่ดึงข้อมูลมา คุณต้องตรวจสอบว่าไม่ได้แคช GoogleMap ไว้ หรือมีการเผยแพร่การอ้างอิงเมื่อมีการเรียก NavigationView#onDestroy หรือ MapView#onDestroy หากใช้ NavigationSupportFragment, MapSupportFragment หรือส่วนย่อยของคุณเองการรวมมุมมองเหล่านี้ คุณต้องเผยแพร่การอ้างอิงใน Fragment#onDestroyView

class NavFragment : SupportNavigationFragment() {

  var googleMap: GoogleMap?

  override fun onCreateView(
    inflater: LayoutInflater,
    parent: ViewGroup?,
    savedInstanceState: Bundle?,
  ): View  {
    super.onCreateView(inflater,parent,savedInstanceState)
    getMapAsync{map -> googleMap = map}
  }

  override fun onDestroyView() {
    googleMap = null
  }
}

ยกเลิกการลงทะเบียน Listener เมื่อไม่จำเป็นต้องใช้แล้ว

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

ตัวอย่างเช่น สมมติว่าแอปพลิเคชันใช้ Navigation SDK และเรียก Listener ต่อไปนี้ให้คอยฟังเหตุการณ์การมาถึง addArrivalListener เมธอดเพื่อฟังเหตุการณ์การมาถึง ก็ควรเรียกใช้ removeArrivalListener เมื่อไม่จำเป็นต้องตรวจสอบเหตุการณ์การมาถึงอีกต่อไป

var arrivalListener: Navigator.ArrivalListener? = null

fun registerNavigationListeners() {
  arrivalListener =
    Navigator.ArrivalListener {
      ...
    }
  navigator.addArrivalListener(arrivalListener)
}

override fun onDestroy() {
  navView.onDestroy()
  if (arrivalListener != null) {
    navigator.removeArrivalListener(arrivalListener)
  }

  ...
  super.onDestroy()
}

ยกเลิกงานเมื่อไม่จำเป็น

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

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

ส่งต่อเมธอดวงจรเพื่อปล่อยทรัพยากร

หากแอปใช้ Navigation หรือ Maps SDK โปรดปล่อยทรัพยากรโดยส่งต่อเมธอดวงจร (แสดงเป็นตัวหนา) ไปยัง navView ซึ่งทำได้โดยใช้ NavigationView ใน Navigation SDK หรือ MapView ใน Maps หรือ Navigation SDK นอกจากนี้ คุณยังใช้ SupportNavigationFragment หรือ SupportMapFragment แทนการใช้ NavigationView และ MapView โดยตรงได้ตามลำดับ ส่วนย่อยการสนับสนุนจะจัดการการส่งต่อเมธอดวงจรของลูกค้า

class NavViewActivity : AppCompatActivity() {

  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    ...
    navView = ...
    navView.onCreate(savedInstanceState)
    ...
  }

  override fun onSaveInstanceState(savedInstanceState: Bundle) {
    super.onSaveInstanceState(savedInstanceState)
    navView.onSaveInstanceState(savedInstanceState)
  }

  override fun onTrimMemory(level: Int) {
    super.onTrimMemory(level)
    navView.onTrimMemory(level)
  }

  /* Same with
    override fun onStart()
    override fun onResume()
    override fun onPause()
    override fun onConfigurationChanged(...)
    override fun onStop()
    override fun onDestroy()
  */
}

ใช้ SDK เวอร์ชันล่าสุด

Google SDK ได้รับการอัปเดตฟีเจอร์ใหม่ๆ การแก้ไขข้อบกพร่อง และปรับปรุงประสิทธิภาพอย่างต่อเนื่อง อัปเดต SDK ในแอปให้เป็นปัจจุบันอยู่เสมอเพื่อรับการแก้ไขข้อบกพร่องเหล่านี้

แก้ปัญหาหน่วยความจำรั่วไหล

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

ก่อนเริ่มต้น คุณควรทำความคุ้นเคยกับวิธีที่ Android จัดการหน่วยความจำ โปรดอ่านภาพรวมของการจัดการหน่วยความจำของ Android

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

  1. สร้างปัญหาอีกครั้ง ขั้นตอนนี้จะสำคัญต่อการแก้ไขข้อบกพร่อง
  2. ตรวจดูว่ามีการใช้หน่วยความจำตามที่คาดไว้ ตรวจสอบว่าการใช้งานที่เพิ่มขึ้นของการรั่วไหลไม่ใช่หน่วยความจำที่จำเป็นในการเรียกใช้แอปพลิเคชันของคุณ
  3. แก้ไขข้อบกพร่องในระดับสูง ยูทิลิตี้มีหลายอย่าง ที่คุณสามารถใช้แก้ไขข้อบกพร่องได้ ชุดเครื่องมือมาตรฐาน 3 ชุดจะช่วยแก้ไขข้อบกพร่องของปัญหาด้านหน่วยความจำใน Android ได้แก่ Android Studio, Perfetto และยูทิลิตีบรรทัดคำสั่ง Android Debug Bridge (adb)
  4. ตรวจสอบการใช้งานหน่วยความจำของแอป รับฮีพดัมพ์และการติดตาม การจัดสรร จากนั้นให้วิเคราะห์
  5. แก้ไขการรั่วไหลของหน่วยความจำ

ส่วนต่อไปนี้จะครอบคลุมขั้นตอนเหล่านี้โดยละเอียด

ขั้นตอนที่ 1: ดำเนินการตามขั้นตอนที่ทำให้เกิดปัญหาอีกครั้ง

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

  • ชุดฟีเจอร์ใดบ้างที่เปิดใช้งาน

  • การดำเนินการของผู้ใช้ตามลำดับใดที่ทำให้เกิดการรั่วไหล

    • คุณได้ลองเปิดใช้งานลำดับนี้ซ้ำหลายครั้งแล้วหรือยัง
  • แอปมีสถานะวงจรใดหมุนเวียนบ้าง

    • คุณได้ลองทำซ้ำหลายครั้งผ่านสถานะวงจรต่างๆ แล้วหรือไม่

ตรวจสอบว่าคุณสร้างปัญหาอีกครั้งได้ใน SDK เวอร์ชันล่าสุด ปัญหาจากเวอร์ชันก่อนหน้าอาจได้รับการแก้ไขแล้ว

ขั้นตอนที่ 2: ตรวจสอบว่าการใช้งานหน่วยความจำของแอปเป็นไปตามที่คาดไว้หรือไม่

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

  • แนวโน้มการรั่วไหล: การเปิดใช้งานสถานการณ์ผ่านการทำซ้ำหลายๆ ครั้งจะทำให้มีการใช้หน่วยความจำเพิ่มขึ้นเมื่อเวลาผ่านไป

  • การใช้งานหน่วยความจำที่คาดไว้: ระบบจะเรียกคืนหน่วยความจำหลังจากที่สถานการณ์หยุดลง

  • การใช้งานหน่วยความจำที่คาดไว้: การใช้งานหน่วยความจำจะเพิ่มขึ้นเป็นระยะเวลาหนึ่ง จากนั้นจึงค่อยๆ ลดลง ซึ่งอาจเกิดจากแคชที่มีการควบคุมหรือการใช้งานหน่วยความจำที่คาดไว้

หากลักษณะการทํางานของแอปน่าจะต้องใช้หน่วยความจำตามที่คาดหวังไว้ ปัญหาก็แก้ไขได้ด้วยการจัดการหน่วยความจำของแอป สำหรับความช่วยเหลือ โปรดดู จัดการหน่วยความจำของแอป

ขั้นตอนที่ 3: แก้ไขข้อบกพร่องในระดับสูง

เมื่อแก้ไขข้อบกพร่องของหน่วยความจำรั่วไหล ให้เริ่มต้นจากระดับสูง แล้วเจาะลึกถึงความเป็นไปได้ให้แคบลง ให้ใช้เครื่องมือแก้ไขข้อบกพร่องระดับสูงเหล่านี้เพื่อวิเคราะห์ก่อนว่ามีรอยรั่วซึมเมื่อเวลาผ่านไปหรือไม่

เครื่องมือสร้างโปรไฟล์หน่วยความจำของ Android Studio

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

เครื่องนับจำนวน Perfetto

Perfetto ทำให้คุณควบคุมการติดตามเมตริกต่างๆ ได้อย่างแม่นยำและนำเสนอเมตริกทั้งหมดในฮิสโตแกรมเดียว ดูข้อมูลเพิ่มเติมได้ที่ Perfetto Memory Counter

อินเทอร์เฟซผู้ใช้ของ Perfetto

ยูทิลิตีบรรทัดคำสั่งบริดจ์ (adb) สำหรับ Android Debug

ข้อมูลจำนวนมากที่ติดตามด้วย Perfetto ยังใช้เป็นยูทิลิตีบรรทัดคำสั่ง adb ที่คุณค้นหาได้โดยตรงอีกด้วย ตัวอย่างที่สำคัญ มี 2 ตัวอย่างดังนี้

  • Meminfo ให้คุณดูข้อมูลหน่วยความจำโดยละเอียดในช่วงเวลาหนึ่งได้

  • Procstats แสดงสถิติรวมที่สำคัญบางอย่างในช่วงเวลาหนึ่ง

สถิติสำคัญที่ต้องดูที่นี่คือการใช้หน่วยความจำทางกายภาพ (maxRSS) สูงสุดที่แอปต้องใช้เมื่อเวลาผ่านไป MaxPSS อาจไม่ถูกต้อง หากต้องการทราบวิธีเพิ่มความแม่นยำ โปรดดูแฟล็ก adb shell dumpsys procstats --help –start-testing

การติดตามการจัดสรร

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

ขั้นตอนที่ 4: ตรวจสอบหน่วยความจำของแอปที่ใช้ด้วยฮีพดัมพ์

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

Android Studio สามารถตรวจหาการรั่วไหลของหน่วยความจำที่ GC แก้ไขไม่ได้ เมื่อคุณบันทึกฮีพดัมพ์ Android Studio จะตรวจสอบว่ามีกิจกรรมหรือ Fragment ที่ยังคงเข้าถึงได้แต่ทำลายไปแล้วหรือไม่

  1. บันทึกฮีพดัมพ์
  2. วิเคราะห์ฮีพดัมพ์เพื่อหาหน่วยความจำรั่วไหล
  3. แก้ปัญหาหน่วยความจำรั่วไหล

โปรดดูรายละเอียดที่ส่วนต่อไปนี้

บันทึกฮีพดัมพ์

หากต้องการบันทึกฮีพดัมพ์ คุณสามารถใช้ Android Debug Bridge (adb) หรือ Android Studio Memory Profiler ได้

ใช้ adb เพื่อบันทึกฮีพดัมพ์

หากต้องการบันทึกฮีพดัมพ์โดยใช้ adb ให้ทำตามขั้นตอนต่อไปนี้

  1. เชื่อมต่ออุปกรณ์ Android กับคอมพิวเตอร์
  2. เปิด Command Prompt แล้วไปที่ไดเรกทอรีที่มีเครื่องมือ adb
  3. หากต้องการบันทึกฮีพดัมพ์ ให้เรียกใช้คำสั่งนี้

    adb shell am dumpheap my.app.name $PHONE_FILE_OUT

  4. หากต้องการเรียกข้อมูลฮีพดัมพ์ ให้เรียกใช้คำสั่งนี้

    adb pull $PHONE_FILE_OUT $LOCAL_FILE.

ใช้ Android Studio เพื่อบันทึกฮีพดัมพ์

หากต้องการบันทึกฮีพดัมพ์โดยใช้เครื่องมือสร้างโปรไฟล์หน่วยความจำของ Android Studio ให้ทำตามขั้นตอนต่อไปนี้ในส่วนจับภาพฮีพดัมพ์ของ Android

วิเคราะห์ฮีพดัมพ์เพื่อหาหน่วยความจำรั่วไหล

เมื่อบันทึกฮีพดัมพ์แล้ว คุณจะใช้โปรไฟล์หน่วยความจำของ Android Studio เพื่อวิเคราะห์ได้ โดยทำตามขั้นตอนต่อไปนี้

  1. เปิดโปรเจ็กต์ Android ใน Android Studio

  2. เลือกเรียกใช้ แล้วเลือกการกำหนดค่าแก้ไขข้อบกพร่อง

  3. เปิดแท็บเครื่องมือสร้างโปรไฟล์ Android

  4. เลือกหน่วยความจำ

  5. เลือกเปิดฮีพดัมพ์ แล้วเลือกไฟล์ฮีพดัมพ์ที่คุณสร้างขึ้น เครื่องมือสร้างโปรไฟล์หน่วยความจำจะแสดงกราฟการใช้หน่วยความจำของแอป

  6. ใช้กราฟเพื่อวิเคราะห์ฮีพดัมพ์

    • ระบุออบเจ็กต์ที่ไม่ได้ใช้งานแล้ว

    • ระบุวัตถุที่ใช้หน่วยความจำมาก

    • ดูว่าแต่ละออบเจ็กต์ใช้หน่วยความจำไปเท่าใด

  7. ใช้ข้อมูลนี้เพื่อจำกัดขอบเขตหรือค้นหาแหล่งที่มาของการรั่วไหลของหน่วยความจำและแก้ไข

ขั้นตอนที่ 5: แก้ไขการรั่วไหลของหน่วยความจำ

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

เครื่องมือแก้ไขข้อบกพร่องอื่นๆ

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

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

แม้ว่าคุณจะไม่ได้ใช้โค้ดแบบเนทีฟโดยตรง แต่ไลบรารี Android ทั่วไปหลายรายการ ก็สามารถทำได้ ซึ่งรวมถึง SDK ของ Google ด้วย หากคุณคิดว่าหน่วยความจำรั่วไหลอยู่ในโค้ดแบบเนทีฟ คุณมีเครื่องมือหลายอย่างที่คุณใช้เพื่อแก้ไขข้อบกพร่องได้ การติดตามการจัดสรรด้วย Android Studio หรือ heapprofd (และใช้งานร่วมกับ Perfetto ได้ด้วย) เป็นวิธีที่ยอดเยี่ยมในการระบุสาเหตุที่เป็นไปได้ของการรั่วไหลของหน่วยความจำ และมักจะเป็นวิธีที่รวดเร็วที่สุดในการแก้ไขข้อบกพร่อง

การติดตามการจัดสรรยังมีข้อดีที่โดดเด่นในการให้คุณแชร์ผลลัพธ์โดยไม่ต้องรวมข้อมูลที่ละเอียดอ่อนซึ่งพบได้ในฮีพ

ตรวจหารอยรั่วด้วย LeakCanary

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

วิธีรายงานปัญหาเกี่ยวกับ SDK ของ Google

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

  • ขั้นตอนการสร้างการรั่วไหลของหน่วยความจำอีกครั้ง หากขั้นตอนต้องมีการเขียนโค้ดที่ซับซ้อน การคัดลอกโค้ดที่จำลองปัญหาลงในแอปตัวอย่างของเราอาจช่วยคุณได้ และระบุขั้นตอนเพิ่มเติมที่ต้องดำเนินการใน UI เพื่อทำให้เกิดการรั่ว

  • ฮีพดัมพ์ที่บันทึกจากแอปพร้อมกับสร้างปัญหาอีกครั้ง บันทึกฮีพดัมพ์ในช่วงเวลา 2 จุดที่แตกต่างกัน ซึ่งแสดงให้เห็นว่าการใช้งานหน่วยความจำเพิ่มขึ้นอย่างมาก

  • หากคาดว่าหน่วยความจำในเครื่องจะรั่วไหล ให้แชร์ผลการติดตามการจัดสรรจาก heapprofd

  • รายงานข้อบกพร่องที่เกิดขึ้นหลังจากที่คุณสร้างเงื่อนไขการรั่วไหลอีกครั้ง

  • สแต็กเทรซข้อขัดข้องที่เกี่ยวกับหน่วยความจำ

    หมายเหตุสำคัญ: สแต็กเทรซมักจะไม่เพียงพอสำหรับแก้ไขข้อบกพร่องของหน่วยความจำ ดังนั้นโปรดตรวจสอบว่าคุณได้ให้ข้อมูลในรูปแบบอื่นด้วย