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

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

บทนำ

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

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

สิ่งที่ควรทำก่อนติดต่อทีมสนับสนุน

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

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

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

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

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

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

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

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

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

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

ข้อผิดพลาดที่พบบ่อยคือ Google Map อาจทำให้หน่วยความจำรั่วไหลได้หากมีการแคชโดยใช้ 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 ในแผนที่ หรือ 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 ในแอปอยู่เสมอเพื่อรับ SDK

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

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

ก่อนเริ่มต้นใช้งาน คุณควรทำความคุ้นเคยกับวิธีจัดการของ 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

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

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

  • Procstats ให้ สถิติโดยรวมที่สำคัญบางอย่างในช่วงที่ผ่านมา

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

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

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

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

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

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

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

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

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

ในการบันทึกฮีปดัมป์ คุณสามารถใช้ Android Debug Bridge (adb) หรือ เครื่องมือสร้างโปรไฟล์หน่วยความจำของ Android Studio

ใช้ adb เพื่อจับภาพฮีปดัมป์

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

  1. เชื่อมต่ออุปกรณ์ Android กับคอมพิวเตอร์
  2. เปิดพรอมต์คำสั่งและไปยังไดเรกทอรีที่มีเครื่องมือ 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 Profiler

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

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

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

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

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

    • ดูว่าออบเจ็กต์แต่ละรายการใช้หน่วยความจำมากเพียงใด

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

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

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

เครื่องมือดีบักอื่นๆ

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

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

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

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

ระบุการรั่วไหลด้วย LeakCanary

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

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

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

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

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

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

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

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

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